perm filename MONCOM.BH[S,DOC] blob
sn#870343 filedate 1989-02-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00174 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00020 00002 STANFORD ARTIFICIAL INTELLIGENCE LABORATORY March 1982
C00023 00003 1 INTRODUCTION FOR NEW USERS
C00024 00004 1.1 Introduction to Timesharing
C00033 00005 1.2 Timesharing at the AI Lab
C00045 00006 1.3 Introduction to Terminals
C00055 00007 1.4 Typing Commands to the Monitor
C00061 00008 1.5 File Storage
C00071 00009 1.6 LOGIN and KJOB Commands
C00074 00010 1.7 Editing Commands
C00079 00011 1.8 Commands for Compiling and Running Programs
C00083 00012 1.9 Information Commands
C00086 00013 1.10 Programs and Core Images
C00090 00014 2 DISPLAY TERMINALS
C00092 00015 2.1 DD and III Keyboards
C00099 00016 2.2 The Line Editor
C00114 00017 2.3 Line Editor Activation
C00122 00018 2.4 ESCAPE and BREAK Commands
C00134 00019 2.5 The Wholine
C00150 00020 2.6 Page Printer Control
C00157 00021 2.7 Data Disc Control
C00159 00022 Virtual Terminals
C00165 00023 Keyboard Mapping
C00179 00024 Video Switch Commands
C00188 00025 Spying on Hidden Terminals
C00191 00026 2.8 III Control
C00193 00027 2.9 Audio Switch Control
C00199 00028 2.10 Individual Display Terminals
C00212 00029 Supported Types of Individual Display Terminals
C00220 00030 Login Options for Individual Displays
C00230 00031 Special Notes on Various Displays
C00235 00032 Display Terminal Capabilities Required for WAITS Support
C00238 00033 2.11 EDIT-key Displays
C00249 00034 2.12 NOEDIT Displays
C00253 00035 NORMAL mode for non-EDIT-key displays
C00262 00036 QUOTE mode for non-EDIT-key displays
C00271 00037 BUCKY-QUOTE modes
C00273 00038 ALL-QUOTE modes
C00276 00039 Switching modes
C00280 00040 Redefining the redefinable characters
C00283 00041 What QUOTE mode is good for
C00287 00042 2.13 Terminal Input Macros
C00297 00043 3 NON-DISPLAY TERMINALS
C00304 00044 3.1 Non-display ESCAPE commands
C00312 00045 3.2 The TTY Command
C00323 00046 4 BASIC MONITOR COMMANDS
C00324 00047 4.1 Running Programs
C00328 00048 4.2 Manipulating Core Images
C00335 00049 4.3 Starting Programs
C00340 00050 4.4 Detached Jobs
C00349 00051 4.5 Device Control
C00362 00052 4.6 System Information
C00371 00053 4.7 Miscellaneous Commands
C00380 00054 5 SYSTEM PROGRAM COMMANDS
C00382 00055 5.1 LOGIN
C00417 00056 5.2 LOGOUT
C00427 00057 5.3 SNAIL
C00431 00058 5.4 COPY and SPOOL
C00435 00059 5.5 MAIL
C00438 00060 5.6 DART
C00440 00061 5.7 DO
C00449 00062 Extended DO Features--the Brick Character
C00452 00063 Special Character Generation
C00454 00064 System Character Generation
C00455 00065 Activation Table Manipulation
C00456 00066 Brick Character Manipulation
C00457 00067 Typing Out Text
C00459 00068 Macro Variable Commands
C00461 00069 Output Control Commands
C00463 00070 Miscellaneous Commands
C00464 00071 5.8 ZERO
C00467 00072 5.9 WHO
C00474 00073 WHO commands
C00490 00074 5.10 FIND
C00492 00075 File to Be Searched
C00494 00076 What Gets Printed
C00499 00077 What Gets Searched For
C00503 00078 Putting The Results in a File
C00504 00079 The OMIT Clause
C00506 00080 The OFIND Command
C00508 00081 Examples
C00512 00082 Using DFIND From E
C00515 00083 Final Notes
C00517 00084 EFIND
C00518 00085 5.11 Other System Information Programs
C00529 00086 5.12 Miscellaneous System Programs
C00543 00087 6 PRIVILEGED COMMANDS
C00555 00088 A1 SNAIL
C00557 00089 A1.1 EDIT-Class Commands
C00566 00090 A1.2 COMPILE-Class Commands
C00568 00091 A1.3 DOCUMENT-Type COMPILE-Class Commands
C00570 00092 A1.4 LOADBUF-Type COMPILE-Class Commands
C00575 00093 A1.5 COMPILE-Type COMPILE-Class Commands
C00586 00094 More on File Names
C00588 00095 More on Switches
C00590 00096 Concatenation of Source Files
C00593 00097 Producing Symbolic Listings
C00597 00098 Generating Core Images and DMP Files
C00602 00099 Library Searches
C00605 00100 Alternate Processor Features
C00609 00101 Translator Switches
C00611 00102 Loader Switches
C00613 00103 Command Files
C00616 00104 A1.6 CREF Command
C00617 00105 A1.7 SNAIL Switch Function Summary
C00621 00106 A1.8 LOADER Switches and LINK Equivalents
C00625 00107 A1.9 Error Messages
C00630 00108 A2 COPY
C00631 00109 A2.1 Syntax
C00634 00110 A2.2 General Operation
C00645 00111 A2.3 Device Peculiarities
C00651 00112 A2.4 Switches
C00680 00113 Monitor Commands
C00683 00114 A2.5 Examples
C00687 00115 A3 SPOOL
C00699 00116 Delayed Listing
C00701 00117 Page Selection
C00702 00118 Multiple Copies of a File
C00703 00119 A3.1 XSPOOL and DOVER Special Features
C00722 00120 A3.2 The QSPOOL Command
C00728 00121 A3.3 UNSPOOL Command
C00731 00122 A4 MAIL
C00732 00123 A4.1 The MAIL program
C00739 00124 A4.2 Command Format
C00750 00125 A4.3 Destinations and Destination Lists
C00761 00126 A4.4 Message Formats
C00769 00127 A4.5 Message File Formats
C00772 00128 A4.6 Command Switches
C00789 00129 A4.7 Dates and Times
C00797 00130 A4.8 Wildcard Dates and Expiration Counts
C00800 00131 A4.9 Mail to Other Network Hosts
C00812 00132 A4.10 The MAIL Command
C00827 00133 A4.11 The SEND Command
C00832 00134 A4.12 The REMIND Command
C00835 00135 A4.13 The GRIPE Command
C00838 00136 A4.14 The EVENT Command
C00842 00137 A4.15 The PLAN Command
C00845 00138 A4.16 The NAME Command
C00846 00139 A4.17 The RETRY Command
C00848 00140 A4.18 The LATER Command
C00854 00141 A4.19 The BATCH Command
C00865 00142 A4.20 The REENTER Error Recovery Facility
C00870 00143 A4.21 Hand-Holding Mode
C00872 00144 A4.22 Interfacing to MAIL from Other Programs
C00882 00145 A4.23 The CANCEL Command
C00884 00146 A4.24 CKMAIL and CKSUM
C00887 00147 A4.25 The RCV Command
C00911 00148 A5 DART
C00925 00149 A5.1 Dart Tape Format
C00930 00150 A5.2 Dart File Backup Policy
C00934 00151 A5.3 Privileged Dart Commands
C00936 00152 A6 NETWORKS
C00943 00153 A6.1 The User Telnet
C00947 00154 A6.2 TELNET, DTN, OTN, DIAL and PTYJOB
C00950 00155 A6.3 Display Mode (Telnet, DIAL and PTYJOB)
C00954 00156 A6.4 Transparent Mode (Telnet only)
C00958 00157 A6.5 DTN: Datamedia Simulator Telnet
C00961 00158 A6.6 Commands to Telnet, DIAL, and PTYJOB
C00977 00159 A6.7 SUPDUP
C00984 00160 A6.8 FTP: The File Transfer Protocol
C01009 00161 A6.9 Multiple File Transfer
C01025 00162 A6.10 One-line FTP transfers
C01031 00163 A7 CARE AND FEEDING OF DEVICES
C01032 00164 A7.1 DECtapes
C01034 00165 A7.2 Magnetic Tapes
C01039 00166 A7.3 XGP: Xerox Graphics Printer
C01046 00167 A7.4 UDP: User Disk Pack
C01054 00168 A8 MONITOR ERROR MESSAGES
C01108 00169 A9 BIBLIOGRAPHY
C01115 00170 A10 WAITS CHARACTER SET
C01122 00171 A11 MONITOR COMMAND SUMMARY
C01125 00172 Command Program Arguments Page Description (* means privileged)
C01145 00173 Commands that run programs:
C01151 00174 INDEX
C01192 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY March 1982
OPERATING NOTE 54.7
M O N I T O R C O M M A N D M A N U A L
(Fifth Edition)
by
Brian Harvey
edited by
Martin Frost
ABSTRACT
This document describes the monitor commands available to users of the WAITS
timesharing system at the Stanford Artificial Intelligence Laboratory, and the
use of the terminals connected to this system. The first section is an
introduction to the system for new users. Several appendices are included
containing documentation of commonly used system programs. This manual
supersedes SAILON 54.6.
The fourth edition of this manual was supported by the Advanced Research
Projects Agency of the Office of the Secretary of Defense under contract
MDA903-76-C-0206.
ACKNOWLEDGMENTS
Several sections of this document were excerpted from program documentation
written by others. Contributors include Mike Clancy, Mark Crispin, Bo Eross,
Martin Frost, Ralph Gorin, Dick Helliwell, Andy Moorer, Jeff Rubin, Jim Stein,
Dan Swinehart, and Don Woods. John McCarthy wrote the Introduction to
Timesharing section. This document was produced on the Xerox Graphics Printer
using the PUB program written by Larry Tesler and improved by Rich Johnsson,
Pitts Jarvis, and Tovar.
1 INTRODUCTION FOR NEW USERS
This manual describes the monitor commands used in the PDP-10 computer system at
the Stanford Artificial Intelligence Laboratory. The first section is an
introduction for new users, including brief explanations of terminals, file
storage, and some of the essential monitor commands. The computer is operated
exclusively as a timesharing system, and the section begins with an introduction
to timesharing.
1.1 Introduction to Timesharing
A timesharing computer system includes the computer itself (in our case a PDP-10
computer made by the Digital Equipment Corporation), user terminals for input to
and output from the computer (in our case about 60 keyboard and display
terminals), and a file system that keeps programs, data for the programs,
reports, and other data for the users.
The basic idea of timesharing is to allow each user to behave as though he had a
computer to himself controlled from his terminal. This is accomplished by
having the computer cycle its attention among the users wanting service in
rotation. It does this fast enough so that small requests are serviced in a
time that ranges from a small fraction of a second to a few seconds, depending
on the number of people demanding service at that instant. If the desired
computation is long, the computer will do a bit of it, then service other
people, then return to it, and so on until the computation is done. The time
taken will depend on the size of the computation and how busy the machine is.
At any time the user's terminal is interacting with some program. These
programs include the timesharing monitor; editors used to prepare programs,
documents, reports and other data; various utility programs; and the user's own
programs.
When you first sit down at a terminal, you will be interacting with the monitor,
and you can always get back to the monitor by pressing the CALL key on the
terminal. The first thing you have to do is to log in, which tells the monitor
who you are so it can connect you to the file directory that contains your files
and can do its accounting. The last thing you do is log out so that the
terminal and other resources you have been occupying can be used by someone
else.
You will have a certain quota of disk space and will be able to keep files such
as programs between uses of the computer. Therefore, you will not ordinarily
need any external form of storage such as punched cards or magnetic tape. (Our
computer doesn't even have punched card equipment.)
A user gets service from programs by typing commands to the monitor. Some
monitor commands perform the service and leave you again talking to the monitor.
Others cause a program to be started; thereafter, you have to interact with that
program in the way prescribed by it. When you are done with it, you go back to
the monitor.
Your program also gets service from the monitor by means of special
instructions, called UUOs, used in the program. The monitor provides many
different services as a sort of subroutine of your program; most importantly, it
is responsible for allocating resources, like core storage and input/output
devices, among different jobs. Therefore, input and output must be done through
the monitor to avoid conflicts. These UUOs are documented in their own manual;
this one is about the commands you type at your terminal.
A typical task is to write a program in some computer language such as SAIL (our
dialect of ALGOL) or LISP and then debug the program by running it, checking the
results, and changing it until it gives the right answers. This is accomplished
in the following steps:
1. First you run an editor. (We have several, but the current favorite is
called E.) The editor reads whatever you type and displays it; what you type
becomes the text of the program you are writing. However, the editor gives you
convenient facilities for going back in your text and making changes that you
think of as you go along. Most people don't write their programs on paper, but
make them up as they use the editor. When the program is ready to try, you exit
from the editor back to the monitor, and your program is a file on the disk with
a name you have given it. At any time, you can re-edit this file to make
changes in it. You can also print it on the line printer to take a copy home,
and when you don't need it any more you can delete it.
2. Normally, the next step is to call a compiler to translate the program from
a source language into machine language, call the loader to load it into your
core image, and finally ask the computer to run it. You can do these things as
separate operations, but facilities are provided for initiating all of this with
a single command.
3. When the computer runs your program, it may just produce answers and stop.
If you like the answers, perhaps you are done. Otherwise, you go back to the
editor to make changes in the source file and try again. On the other hand, you
may have written an interactive program which expects you to type input on the
terminal. It interprets your input and gives output, then asks for more input,
etc. Your program may read files and write them. It may display pictures on
your terminal. Also, it may interact with the physical world by reading
pictures from one of the TV cameras attached to the computer and by waving the
mechanical arm.
4. In order to debug a program, you may have to do more than just look at the
output. Therefore, the timesharing system has facilities for examining and
changing the contents of registers and for putting break-points in programs.
1.2 Timesharing at the AI Lab
Our timesharing system, called WAITS, runs on a Digital Equipment Corporation
(DEC) PDP-10 computer. This is a 36-bit machine designed for timesharing
applications; the particular kind of PDP-10 we have is called a KL-10. The
computer system itself is called SU-AI (for Stanford University Artificial
Intelligence Lab), or SAIL for "short". We have 2,359,296 words of core storage
and 17,179,869,184 words of online system disk storage (plus many user disk
packs). Our timesharing system, derived from old DEC software, has been
extensively modified for our special requirements.
Programming languages available here include SAIL, a version of ALGOL with added
features for backtracking, list processing, associative processing, and
coroutining; several versions of LISP; FAIL, our PDP-10 assembly language; and
the MICRO-PLANNER problem solving language.
To use the computer, you must type a LOGIN command at your terminal. (See
Section 1.6 for a description of this command.) The monitor assigns you a job
number, which it uses internally to keep track of you. Associated with your job
are various resources, of which the most important is the core image, i.e., the
simulated core storage maintained for you by the monitor so that your program
can use addresses starting from zero although it may really be located anywhere
in core while running. Your job only has one core image; if you type a monitor
command which causes a program to be run, that program replaces your old core
image. There is no way for one job to run two programs at once.
As a user of the Stanford AI Lab system, you will be given a programmer name to
identify you to the computer. The main reason for this is so that the monitor
knows which files on the disk storage belong to you. This name will probably be
your initials. When you log in, you must type in this name, along with a
project name which allows you to divide your files into separate groups for the
various projects you are working on. For example, if you are doing homework for
a Computer Science course, the course number might be your project name. The
combination is called a project-programmer name or PPN and is typed PRJ,PRG or
sometimes [PRJ,PRG] when used in a file specification. It is possible to switch
your attention from one project to another without having to log out and log in
again by giving a monitor command to change your alias or disk PPN, the PPN used
for file access if you do not specify a file directory explicitly. Therefore,
many users always log in using a single "master" project name; project "1" is
the conventional name for this purpose.
Ours is just about the most heavily used computer we know of. It's hard to get
good service, especially weekday afternoons. Therefore, please be careful about
leaving jobs logged in when you leave, and don't play games during the day!
Even a job which is not running uses up scarce resources. The system will
automatically log out a job which has not run a program for ten minutes (twenty
minutes at night), if some scarce resource can be regained that way. Potential
scarce resources include Data Disc channels, dialup phone lines, and job slots.
Even without a resource shortage, the system will automatically log out any job
that has been idle more than about two hours. Autologout will happen even if
the job is waiting for the user to type something on the terminal. For example,
if you are editing a file and have made changes which have not yet been written
on the disk, your changes will be lost if you are logged out automatically for
not running for a while. A warning message is typed out five minutes before the
actual logout. You can prevent autologout by typing the monitor command
ENABLE LIV which enables the LIV privilege, (see page 87), but it is antisocial
to do this routinely and it only affects your current core image (program); this
command exists for keeping a dead core image around while someone is poking at
it. If you are logged in at a Data Disc (or dialup) terminal and there is a
shortage of Data Disc channels (or dialup lines), and if you would be eligible
for logout but have enabled LIV, then your job will be detached from your
terminal (see Section 4.4), so the job will stay around but your terminal will
be freed for other users. Also, you can enable the DET privilege (ENABLE DET)
which will cause your job simply to be detached instead of logged out if there
is a terminal shortage but no job slot shortage when you have been idle. The
DETACH option in LOGIN (see Section 5.1) can be used to enable the DET
privilege automatically when you log in. Note: Autologout is applied first to
idle jobs that do not have disk files open for writing, but when that doesn't
free up enough resources, autologout is then applied to the remaining idle jobs.
Sometimes the system stops working while you are using it. You will notice that
characters you type no longer appear on your terminal. In many cases, the
system fixes itself after a few seconds, so all that happens is that a few
characters you typed are lost. Otherwise, someone has to go fix it manually.
Sometimes it can be gotten to work again so that you can just continue with what
you were doing. Other times, a new copy of the system is loaded and you have to
start over again. This is called reloading. If this happens, you will see a
message to that effect on your terminal. When editing, it is a good idea to
save your file on the disk every so often in case the system crashes. If the
system crashes and nobody is around to fix it, you may have to reload it
yourself. Directions for how to reload are posted right next to the KL-10's
console terminal in the machine room; but the instructions there tell you to try
to find a wizard before doing anything yourself. Also, often the system can be
"fixed" (instead of reloaded) by typing something simple on the console
terminal; see the instructions posted there and instructions typed out by the
system on the console.
Sometimes the system is stopped intentionally for software or hardware
maintenance. This downtime is scheduled in advance, and part of the system
messages you see when you log in is a maintenance schedule. Some time before
the system is taken down for scheduled maintenance, you will see a warning on
your terminal which counts down to the end. This warns you to save any files
you are writing and stop what you are doing. Such maintenance is often
scheduled between 5pm and 8pm weekday evenings.
This document, the Monitor Command Manual, describes the use of monitor commands
typed in at terminals. Another manual describes the UUOs, instructions used by
programs to communicate with the monitor. Other system information, including
documentation of specific system programs, can be found in some printed manuals
and on the disk; look at the [S,DOC] and [UP,DOC] file directories for program
documentation. Some system programs which are invoked by special monitor
commands are written up in appendices to this manual.
1.3 Introduction to Terminals
A computer terminal has a typewriter-like keyboard and either a TV-like screen
or a typewriter-like printer and is used to communicate with the computer. You
talk to the computer through the keyboard, and the computer responds by
outputting on a display screen or on paper. When the output is done on paper,
we call the terminal a hardcopy terminal. However, you'll probably be using a
display terminal, in which case a TV-like display screen is used for output
instead of a sheet of paper. Almost all of the terminals connected to the SU-AI
computer are display terminals of a particular type, called Data Disc (or DD)
terminals. There are also some IIIs ("triple-I's"), which use keyboards like
those on the Data Discs but with (old) vector displays instead of the TV
monitors of the Data Discs; the IIIs are used mainly for graphics display
programs like the drawing program. In addition to these two types of displays,
the WAITS system supports certain other types of display terminals (e.g.,
Datamedia, Heath 19, Concept 100, etc.) to the extent of making efficient use of
their display screens. Hereafter, the term display terminal will mean a
terminal of a type supported as a display by the WAITS system, namely a DD or
III terminal or one of the types of individual displays listed in Section 2.10.
All other types of terminals are considered "non-displays", whether or not they
use display screens for output! Non-displays are sometimes called Teletypes,
for historical reasons, although the name is a trademark and should not be so
used. Both "Teletype" and "console" are sometimes used to mean any terminal,
although "console" is more properly used to refer only to the computer's
operating console in the machine room and its associated terminal.
A vacant Data Disc or III terminal should say Take Me I'm Yours! along with
some system information. On a III, this information is the system wholine,
described on page 19. On a Data Disc, besides the system wholine, there will
be a status display for all the jobs using the system. If you find a Data Disc
or III that is completely blank, make sure that it's turned on, and that the
brightness and contrast (intensity on IIIs) are turned up. If it says No Data
Disc Channels Left, it means that the Data Disc, which can run only 31 terminals
at once, is full. A terminal that is not in use is called an available
terminal. Please remember to log out when you are done using a terminal so that
it will become available to other users.
Each of the printing character keys on our Data Disc and III terminals has two
characters printed on it (except the 0 key). The bottom one is usually a letter
or digit, and the top one is some special character. To get the character shown
on the top of any key, hold down the TOP key while typing the given character's
key. In addition to the TOP key, there are two SHIFT keys and a SHIFT LOCK key
which are used to make upper-case letters. For example, hitting the "<D" key
alone produces lower case "d"; holding down SHIFT with that key produces capital
"D"; and holding down the TOP key makes it produce "<". SHIFT has no effect
when TOP is used.
When you type something on an available terminal, the available message is
replaced by whatever you typed. The characters you type are kept in a special
buffer called your line editor until you activate them by typing RETURN or one
of a few other special characters. The line editor allows you to change the
contents of the line by using special editing command characters. The
characters in the line editor are displayed on the screen with two cursors:
underlines on Data Discs and triangles on IIIs. The left cursor is underneath
the first character in the line editor; the right cursor is under the place
where the next character you type will go (generally the end of the line). When
your line editor is empty, the cursors coincide. The line editor commands are
explained in Section 2.2. Note: when you type RETURN, the monitor generally
supplies a LINE character automatically. RETURN signifies a return to the left
margin, and LINE an advance to the next line.
To get started using DD terminals before you read about all the line editor
commands, all you need to remember is that the BS key will delete the last
character, and the CLEAR key will delete the entire line. The CONTROL and META
keys are used for other line editor functions.
A note on terminology: In the body of this manual, characters are referred to by
the name printed on the DD keyboard, e.g., RETURN and FORM. In other
documentation, including some of the appendices to this manual, different
notations are used. Some of these are shown here:
function key other notation
break BREAK <BRK> [BRK]
escape ESC <ESC> [ESC] <ESCAPE>
call CALL <CALL> [CALL] ↑C
clear CLEAR [CLEAR] ↑U
tab TAB <TAB> [TAB] <HT>
form feed FORM <FORM> [FORM] <FF>
vertical tab VT <VT>
backspace BS <BS> [BS] <RUBOUT> <DEL>
carriage return RETURN [RETURN] <CR> CR
line feed LINE <LF> LF <LINEFEED>
alt mode ALT <ALT> <ALTMODE> $
shift SHIFT <SHIFT>
top TOP <TOP>
meta META <META> β
control CONTROL <CONTROL> <CTRL> α
The combination of RETURN and LINE (remember that LINE is supplied by the
monitor) is sometimes referred to as CRLF.
1.4 Typing Commands to the Monitor
What you type may be read by different programs at different times, so you
should be aware of what program you're talking to. When you first type on a
vacant terminal, you are talking to the monitor's command decoder. You continue
to talk to the monitor until you start running a program; then you're generally
talking to that program. To distinguish these conditions, the state of the
terminal is described as monitor mode or user mode. When the monitor is ready
to read a command from your terminal, it types a period ("."). Programs usually
type some special character(s) to prompt you when the are ready for a command;
many system programs prompt you with an asterisk ("*").
It is possible to type ahead when the system is not waiting for typein.
Characters you type which are not immediately read by either the monitor or a
program are stored in your terminal's input buffer until they are needed.
Programs can cause this buffer to be cleared. For example, some programs ask
for confirmation of certain commands, e.g., when you specify for output a file
which already exists. Some such programs clear your input buffer first and
others don't, so you can get confused by typing ahead to a program whose
behavior you don't know. Your input buffer is also cleared when you type CALL.
Monitor commands consist of the command name, possibly followed by arguments
separated by spaces or punctuation, and then a RETURN. The command may be typed
using upper and lower case letters interchangeably. Monitor command names may
be typed in completely, or they may be abbreviated to only as many letters as
are necessary to make the name unique; for example, the LOAD command may be
abbreviated LOA, but not LO because there is also a LOGIN command. A few common
commands have single-letter abbreviations (L is accepted to mean LOGIN). Only
the first six letters of a command name are relevant.
Some monitor commands are completely processed by the monitor, without running a
program in your core image. For example, the DAYTIME command types the current
date and time, without disturbing your core image. Most commands, however,
require a program to be run. The monitor usually requires you to log in before
you may run programs; there are a few exceptions, to permit system information
programs like WHO, and of course the LOGIN program itself. If, when not logged
in, you try to run a program which requires you to be logged in, the monitor
automatically runs LOGIN, which will ask you for your project-programmer name.
In this situation, when LOGIN finishes running, it will re-enter the command
which you typed in the first place, so the command will be performed without
making you retype it. Commands which require login but which refer to a
pre-existing core image rather than running a new program (e.g., START) do not
cause this automatic login, but give an error message.
When you first enter a command which runs a program, the system assigns you a
job number and types a line like
Job 19 SU-AI WAITS 9.13/M Assembled 03/21/82
which tells you what version of the monitor is running and when it was created,
as well as your job number. SU-AI is the name of the computer system (host),
and WAITS is the name of the timesharing system running here. If the system
types
Job capacity exceeded
too many jobs are already logged in. When a program like WHO is run without
logging in, the job is killed when the program exits or if the user types CALL.
The LOGIN program, however, leaves you logged in when it exits.
Some of the monitor commands are briefly described starting in Section 1.6.
The full descriptions of all the commands are in Sections 4 and 5, and in the
appendices.
1.5 File Storage
A file is a stored collection of information, perhaps a program or data. Most
files are stored on a permanently available disk unit. Files on the disk must
be identified by name and by owner so that you can get at the one you want.
Files on other devices may also be used; we have magnetic tape, DECtape (a small
mag tape unit unique to Digital Equipment Corporation machines), and paper tape,
as well as printers and various exotic special devices. Whenever a program does
input or output, it has to specify the particular file it wants. A file
identifier is typed in the form
DEV:FILNAM.EXT[PRJ,PRG]
some parts of which can be left out. DEV specifies the device you want.
Generally, if you want the disk (DSK), you may leave out the device name. If
you leave out the device name, leave out the colon too. Device names may
include a number to specify a particular unit; thus, TTY is your own terminal
(all terminals used to be Teletypes, and the name stuck), but TTY30 is the one
next to the vending machine. Besides these physical device names, you can
define logical device names to use in your program. The monitor command ASSIGN
is used to make your logical name refer to some particular physical device.
Some devices, like the disk, require the use of filenames, and some, like the
terminal, don't. If you specify a filename for a device which doesn't use one,
the name is ignored. Devices which require file names are called directory
devices because they include special files called directories which tell where
the other files are. Files are specified by a filename, another name called the
extension, and, on the disk, a PPN specifying the file's owner. Letters in the
filename are upper case, although most programs will accept lower case letters.
The filename is one to six letters or digits, and can say anything you want to
identify the file. The extension, which is optional, is one to three
characters. Although the monitor allows any SIXBIT characters (the ones with
octal ASCII codes between 40 and 137--see Appendix 10) to be used in filenames
and extensions, some programs which read filenames use some punctuation
characters as punctuation characters and won't recognize them in filenames. It
is best to stick to letters and digits. If you find that some program has
written a file called @# $!.X ? in your directory and you are having trouble
dealing with it, you will find that several programs, including the COPY program
for file manipulation, use the notation ↓...↓ for such files, allowing any
SIXBIT characters between the downarrows as part of a filename. (You must, of
course, say ↓FILNAM↓.↓EXT↓ if that's what you want, not ↓FILNAM.EXT↓.) The only
directory devices in this system are the disk, UDPs (User Disk Packs), and
DECtapes.
The extension of a file is generally one of a standard set used to indicate what
sort of file it is, like SAI for a SAIL program, REL for a relocatable binary
program as produced by a compiler, or DMP for a dumped core image. Many
programs use these standard extensions as defaults, so you often can type the
file name alone.
Disk files require a project-programmer name, which selects the directory to use
for the file (see page 5). If you do not type in a PPN, you generally get the
one you gave to LOGIN, although you can change this default with the ALIAS
command. The disk directory for each PPN is called a UFD (User File Directory);
the files in a given directory are also said to comprise a disk area, although
there is not really a physical area involved.
Files are divided into smaller units, called records. The precise meaning of a
record depends on the particular device you are using, but often a record is the
smallest unit of data which the device will transfer to or from the computer at
a time. For example, files on the disk are divided into 200-word (octal)
records. The disk hardware reads or writes one such record at a time. On
magnetic tape, you can write any size records; however, when you read the tape,
each record must be read all at once. The monitor provides buffering so that
your program can deal with the data a character or a word at a time. The
monitor gets a record and stores it for you.
The following devices are available on this system.
DSK the public disk
SYS same as DSK, but implies PPN [1,3] (system files)
UDP1,2 user disk pack, a disk unit for private disk packs
MTA0,1 magnetic tape drives
DTA1-4 DECtape drives
XGP Xerox Graphics Printer
VRN Varian plotter/printer
IMP Interface Message Processor for ARPA network connections
PUP Ethernet protocol device for SUNet connections
DLN0-2 Dialnet ports
PTR paper tape reader
PTP paper tape punch
ELF PDP-11 computer, used to control robotics devices
ARM Robotics arm interlock
GRN Grinnell display processor interlock
TV TV cameras
CAR cart transmitter
TTYn terminals and pseudo-teletypes (see below)
TTY the user's own terminal
CTY PDP-10 console terminal
NUL null device, ignores output, gives end-of-file on input
A pseudo-teletype (PTY) is a simulated terminal-like device used to allow
programs to "type" monitor commands. The program uses special UUOs to output
text to the PTY, which is then seen by the monitor as if it were typed at
another terminal, with its own TTY number. Similarly, text typed out to the PTY
can be read by the controlling program. One user of PTYs is the program which
allows people at other computers to use our system via a network.
Disk files are copied to magnetic tape daily, using the DART program (see
Appendix 5). Monitor commands which run DART can be used to retrieve files
which have been clobbered by system failure (uncommon) or user error.
1.6 LOGIN and KJOB Commands
In this and the following sections, a few of the monitor commands used in
creating and debugging a program are described briefly. More complete
descriptions come later and in other manuals.
The first thing you have to do is log in. The command for this is called LOGIN,
abbreviated L. Your project-programmer name is its argument. (See page 5 for
an explanation of project-programmer names.) Most users use project name 1 when
they log in; to do this you simply give your programmer name as the argument.
If you are named V. I. Lenin, you might type
L VIL
which means the same thing as
L 1/VIL
(The slash means that you don't want to see any system messages which you've
seen before. You could have used a comma to see all messages or a period to see
none at all.) The monitor processes this command by assigning and typing out a
job number, and then starting the LOGIN program in your core image. LOGIN will
ask for your password, and after you give that, it may type some system messages
before it finally exits. You are now logged in. Section 5.1 explains the
LOGIN command more fully, including lots of automatic options that you can
select from.
When you finish doing whatever you want, you should log out. The command for
this is called KJOB, abbreviated K. No arguments are required, just K and
RETURN. (As with all monitor commands, your terminal must be in monitor mode
when the command is given.) This command runs the LOGOUT program, which types
out how much computer time you used, etc., and kills your job. Your terminal
will become available in a few seconds if you don't type anything else. Section
5.2 gives more complete documentation of the logout procedure.
1.7 Editing Commands
To enter your program, or to correct it, you will use one of our text editors.
There are three editors in common use here:
1. E. This is the one you'll generally use. It is a fast display editor with
many diversified features. It is sometimes incorrectly called ETV after the
monitor command by which it is invoked.
2. SOS. This editor is designed for use at non-display terminals. Files
created with SOS include a line number at the beginning of every line. Editing
commands use the line numbers to specify what lines to change, delete, or
whatever. Hopefully you will have no need to use this editor, since you'll be
using display terminals.
3. TECO. This editor is the XTEC version of a standard editor supplied by DEC.
It is extremely powerful, in that it allows you to write editing programs which
can process a file systematically, and it is very flexible about strange
characters in the file. However, for routine editing it is somewhat
inconvenient to use because it does not use the display facility of the
terminals.
Each of these editors is described in its own manual. A bibliography is
included as an appendix to this manual. The point to be explained here is how
to use monitor commands to invoke an editor; we'll assume here that you're using
E.
Suppose you want to write a program called PROG in the SAIL programming
language. The monitor command to create a new file with E is CETV. So you
would type
CETV PROG.SAI
(SAI is the standard extension for SAIL programs.) This command tells the
monitor to run E, and tells E to create a new file named PROG.SAI. E remembers
the last editing command you typed, so later you'll be able to edit the file
simply by entering an ETV command without having to type the file name again.
(Note--LOGOUT normally makes E "forget" your commands, so you have to type the
file name again when you next log in.)
The command for editing an already existing file with E is ETV. You can enter
this command with no argument and it will remember the file from the last edit
command, or you can specify a filename as with the CETV command above.
The other editors (SOS and TECO) do not read monitor commands themselves.
Instead, the corresponding monitor commands for those editors are interpreted by
the SNAIL program, which then starts the appropriate editor. Later in this
manual the ETV and CETV commands will be referred to as "SNAIL commands" even
though they do not actually run SNAIL, since they carry out SNAIL-like
functions.
There is a file you can edit to learn how to use E. To do this, log in and
enter the following command:
HELP ETEACH
Then just read what appears on your screen and follow instructions. This
command creates a file which you may want to delete when you are done.
1.8 Commands for Compiling and Running Programs
Once you have typed in your program, you have to compile it, load it, and run
it. Compilers like SAIL put out relocatable binary programs. This means that
the program is in a form which contains enough information so that it can be
loaded into any address in core. Addresses within the program are all
considered relative to the program's first word, so the LOADER has to add the
actual address of that word to all the relative addresses in the program. Your
program can be loaded along with others, for example a debugging program; the
actual location of any program in your core image will depend on what other
programs are loaded with it. (Note that this relocatable binary program format
has nothing to do with the hardware relocation discussed on page 5.) The core
image produced by the LOADER can be saved in a DMP (dump) file, which can then
be run directly by a monitor command without going through the LOADER again.
Suppose you have typed in your program, PROG.SAI. You want to compile, load,
and run it. You could say
EXECUTE PROG
and all those things would happen automatically. SNAIL would generate a command
file for SAIL telling it to compile PROG.SAI and start up the loader, which also
gets a command file. (SNAIL knows that it should use the SAIL compiler because
of the SAI extension in your filename.) Again, SNAIL remembers the command, so
next time you just have to say EXECUTE and it'll all happen. In fact, the
editors all have commands which automatically re-do the last compile-type SNAIL
command.
Suppose, to make this clearer, you find a bug in the program. To fix it, you
can give the monitor command
ETV
and E will start editing PROG.SAI.
Then you use E commands to edit the file. When you're done, you use the
exit-to-SNAIL command, which in E is CONTROL-X GO. This will automatically
repeat the EXECUTE command you typed before.
There are many different versions of this compilation command: COMPILE will just
compile the program, LOAD will compile and load, etc. The SNAIL commands are
listed in Section 5.3 and fully described in Appendix 1.
1.9 Information Commands
You can sometimes find out how to use a system command by typing HELP followed
by the command name. Typing HELP with no argument will list the kinds of help
available this way. For instance, if you forget how to log in, you can type
HELP LOGIN.
More complete program documentation is accessible through the READ command,
which takes a name as its argument, like HELP, and starts the E editor reading a
file with that name in the documentation directories, if any. This is most
useful from a display terminal, since E is a display-oriented editor. The
command READ HOW will edit the HOW file, which provides introductions on the use
of many system programs.
To get a list of the files in your directory, type the DIRECTORY command. You
can get the list for another disk area by including a PPN in square brackets as
an argument. For more details, see Appendix 2, specifically the DIRECTORY
command on page 113.
For examining your directory from a display, you can use the DIRED program, run
by the DRD command. This is a very useful program for displaying and
manipulating file directories. The basic commands of DIRED are the same as in
the E editor, although not everything is identical, simply because of
differences between directories and files. See the file DIRED.DON[UP,DOC] for
details on DIRED.
You can see the status of all the jobs on the system with the WHO command,
abbreviated W. You can find out about jobs belonging to a particular user by
typing WHERE prg (prg is the programmer name) or FINGER prg. These type out
information about the given user's jobs; try them to find out more. All of
these commands run programs in your core image, so you shouldn't run them if you
need the program you have there.
These information commands can be run without logging in first, except for READ.
1.10 Programs and Core Images
This section discusses the allocation and use of core storage for a job. The
PDP-10 storage is divided into pages of 512 words each. Currently, pages are
always allocated in pairs; thus a job's core image is an even number of pages in
size. A job's core image may be located in any set of actual core pages while
the program is running.
Actually, a job may use two distinct sets of core pages, called the lower and
upper segments. The job must have a lower segment in order to run. This
segment belongs to that job alone. If the job has an upper segment, it may be
shared with other jobs. One use of this is to allow several users to run the
same system program with only one copy of the program in core; the data for the
individual users is stored in each job's lower segment, and the common code is
in the upper segment.
An upper segment may be write protected, so the program in it cannot be
accidentally changed. This is usually done with shared upper segments.
Programs can control the write protection of their upper segment by UUO. Upper
segments are more fully explained in the UUO Manual.
Each upper segment has an entry in the system job table, including a job number,
a segment name, and much of the status information associated with jobs. Some
of the monitor commands described in later sections of this manual refer to
upper segments.
The lowest locations in each lower segment, called the Job Data Area, are used
by the monitor to store information about the job. Some of this information is
of interest only to the monitor, while other parts can be used and modified by
the job itself. In particular, some monitor commands use information from Job
Data Area words, e.g., starting addresses for the program. The description of
such commands will refer to the relevant word by its symbolic name, of the form
JOBxxx, e.g., JOBSA is the word containing the program's normal starting
address. The complete description of the Job Data Area is contained in the UUO
Manual.
2 DISPLAY TERMINALS
A display terminal is one which uses a TV-like screen, rather than a sheet of
paper, as its output medium. However, in this document (and in general around
SU-AI), the term "display terminal" will be used to refer specifically to the
special kinds of display terminals for which special services are provided by
the WAITS operating system. These include the Data Disc and III terminals at
the laboratory, as well as certain other terminals that WAITS knows how to
handle (e.g., Datamedia, Heath 19, Concept 100). These addition types of
display terminals are discussed in Section 2.10; for now we consider only the
Data Discs and IIIs.
The Data Discs and IIIs ("triple-I") use the same keyboards, but have different
display screens. The Data Discs, which are more numerous (about 60 of them),
use TV monitors. (The name Data Disc actually refers not to the terminals
themselves, but to the machine in the computer room which controls them.) The
IIIs are vector plotting displays, used mainly for graphics display programs.
2.1 DD and III Keyboards
Our display terminals use a character set called WAITS ASCII (formerly called
Stanford ASCII). ASCII is a standard computer character set; our version is
similar to the standard but somewhat extended. In particular, the "control"
codes in ASCII, which mean things like "end of text," are used here for printing
characters like α and ∃ and ∩. There are seven bits in a character code; since
the PDP-10 has 36-bit words, five characters fit in a word with one bit left
over. The complete WAITS ASCII character set is listed in Appendix 10.
Each of the printing character keys on our terminals has two characters printed
on it (except the 0 key). The bottom one is usually a letter or digit, and the
top one is some special character. There are two SHIFT keys and a SHIFT LOCK
key, which make letters upper case. The keys which produce the special
characters are labelled TOP. For example, hitting the "<D" key alone produces
lower case "d"; also holding down SHIFT produces capital "D"; and holding down
the TOP key with it produces "<". SHIFT is ignored when TOP is used.
There are several special character codes, generally not printing characters,
which are not affected by SHIFT and TOP. One is the space bar, which spaces as
on any typewriter. The TAB key sends a tab code, which prints by spacing out to
the next tab stop; these are set eight spaces apart and cannot be changed. The
RETURN key sends a carriage return code, and the monitor generally provides a
line feed code after it automatically. The LINE key sends a line feed alone;
this is not too often useful. The FORM key sends a form feed code, and the VT
key a vertical tab. These two are used by some programs as control codes, but
not often for their printing effect. The BS key is backspace (in real ASCII
this code is called delete). This code is usually not sent to your program, but
is taken by the line editor as a command to back up the cursor. The ALT key
sends an alt mode; this code has no printing significance, but is used as a
control code by programs.
Although ASCII is a seven-bit code, display terminals actually send nine-bit
codes to programs. The two extra bits represent the CONTROL and META keys.
These keys are like SHIFT and TOP in that they are held down along with some
other key. The CONTROL and META bits are sometimes called "bucky bits", and the
two combined are called "double bucky". The bits have two different functions.
When the character they are used with is sent to a program, it can be used as a
control command. Editing and debugging programs use such single-character
commands heavily. For example, in the E editor, CONTROL-META-D means to delete
a line. However, the CONTROL and META keys are also used in commands to the
system line editor, e.g., for inserting characters inside a line, etc. The use
of the line editor is explained in Section 2.2.
There are four more keys to be described. They are unusual in that none of them
send characters to your program or to the monitor's command decoder; they are
processed by the monitor's keyboard scanner and the line editor. CLEAR is
simply a line editor command to delete the entire line in the line editor. CALL
is used to stop a program running in your core image and return your terminal to
monitor mode. ESC (escape) and BREAK are used to signal that the characters
which follow are a special command to the monitor; the many different functions
of these commands will be explained in Section 2.4 and following sections.
There should be a list of the ESC and BREAK commands attached to your keyboard;
if not, see page 18 to find out how to print one.
Please note that the ESC and BREAK keys generate codes by themselves; they are
not shift-like keys as CONTROL and META are. Thus, for example, CONTROL-A means
"press the A key while holding down CONTROL," whereas ESC A means "press ESC and
then press A." Also, the ASCII character which is represented on our keyboards
as ALT is sometimes called "escape" (the name was changed a few years ago;
another name for the same function is "prefix") and is produced by a key marked
ESC on some other computer terminals, but our ESC is not one of the ASCII codes
and should not be typed when ALT is wanted.
2.2 The Line Editor
At a display, the characters you type are accumulated by a part of the monitor
called the line editor. When you end a line by typing an activation character,
the entire line is sent to your program (or to the monitor command decoder).
Generally you will activate a line with the RETURN key, although others also
work. The exact workings of activation are discussed in Section 2.3, but
first, there are several editing command characters which can be used to change
the text in the line editor.
There are two line editor cursors displayed on your screen. The left cursor is
underneath the first character in the line editor and is called the line cursor.
The right cursor is under the character position you are about to write into and
is called the character cursor. The cursors are underlines on Data Discs, and
triangles on IIIs. Also, on IIIs, the characters in the line editor are
displayed somewhat below any other characters on the same line. If there is no
text in the line editor, the two cursors coincide.
On Data Disc terminals, when there is no text in the line editor, you will
sometimes see a "broken" cursor consisting of two very short lines. This means
that the program you are running is waiting for a single character to be typed,
rather than an entire line. The reason for this display is that many programs
ask you yes-or-no questions, and some of them expect you to type, e.g., Y
followed by RETURN while others just wait for the Y. The broken cursor warns
you that a RETURN is not expected. However, it is possible for programs to wait
for a single character in sneaky ways which do not cause a broken cursor, so the
warning is not perfectly reliable.
When you type a normal character into the line editor, it is displayed at the
character-cursor position, replacing any other character which was there before.
The CONTROL and META keys are used to change the function of characters typed
in. Also, several characters have different functions depending on whether or
not they are typed with the character cursor at the end of the line. For
example, BS at the end of the line deletes the last character; inside the line,
it moves the cursor left one position without deleting anything.
As explained below, some characters with CONTROL or META bits are normally
interpreted as line editor commands. These commands may only be meaningful
under certain conditions; for example, a command to space forward into the line
is not meaningful if the cursor is already at the end of the line. CONTROL or
META characters which are not meaningful line editor commands can be used as
commands to user programs (in which case they are activation characters); they
can be treated as if they had been typed without the CONTROL or META bit; or
they can be ignored altogether. The choice is made by the user program, which
can also disable some or all line editor commands. This flexibility makes it a
bit complicated to describe exactly what happens in each case (we make an
attempt in the next section), but in general programs are written so that the
"right" thing happens. Roughly, in monitor mode, control characters which are
not line editor commands are treated as if typed with META, i.e., inserted into
the line; when typing to a user program, they generally activate. For the rest
of this section, we ignore the question of CONTROL or META characters which are
not taken as line editor commands, and simply deal with the ones which are.
META along with a printing character (including space and tab) inserts that
character at the cursor position, in front of the character already there,
rather than replacing the old character. META characters are considered
meaningful line editor commands only when not at the end of the line.
BS at the end of the line deletes the last character. If it's not at the end,
BS just backs up the cursor without deleting. People talk about deleting
backspace and non-deleting backspace to distinguish these. CONTROL-BS is always
non-deleting, and META-BS is always deleting.
CONTROL-SPACE is the opposite of CONTROL-BS: it moves the cursor forward without
changing the text. SPACE alone and META-SPACE act like any printing character.
At the end of the line, CONTROL-SPACE usually does nothing (it neither moves the
cursor nor activates).
CONTROL-META-SPACE and CONTROL-META-BS are unlike all other characters typed in
this system in that they are "repeating" commands: they move the cursor forward
and backward, like CONTROL-SPACE and CONTROL-BS, but continue moving the cursor
as long as you hold down the keys. No other CONTROL-META characters are line
editor commands.
CONTROL-TAB moves the cursor to the end of the line, as if you typed
CONTROL-SPACE many times. (Inside the line only.)
CONTROL-FORM is the opposite: it moves the cursor to the beginning of the line,
so the two cursors coincide. (Inside or end of the line is okay for this one.)
CONTROL-D deletes the character above the character cursor. (Inside only.)
Note that this is different from META-BS, which deletes the character to the
left of the cursor.
CONTROL-S skips ahead from the current position of the character cursor to the
next occurrence of the character you type next. If the next character you type
does not occur to the right of the cursor, nothing happens. If the search
character is a letter, the case must match. If the character you type next is
RETURN, the cursor moves to the end of the line. (Inside only.)
CONTROL-K is like CONTROL-S but instead of moving the cursor it kills characters
up to (not including) the one you select. Again, nothing happens if the
character does not occur. If the character you type after CONTROL-K is RETURN,
all the characters from the cursor to the end of the line are deleted. (Inside
only.)
CONTROL-B searches for the character you type next, like CONTROL-S, but searches
backwards (toward the beginning of the line). It is normally accepted as
meaningful anywhere except on an empty line.
CONTROL-L kills backwards, like CONTROL-K, but toward the beginning of the line.
Meaningful except on an empty line.
CONTROL-R repeats the last search or kill command given. It does not wait for
you to type another character, since it remembers the argument from the previous
search or kill command. This works even if the line editor has been activated
since the last search or kill. This is a meaningful command except on an empty
line.
CONTROL-I enters insert mode. In this mode, normal characters typed are
inserted instead of overwriting old ones, and BS is a deleting backspace. You
could get essentially this same effect by holding down the META key with every
character you type. You can get out of insert mode by typing another CONTROL
command (except CONTROL-T) or any META-character (except META-BS). (Inside
only.)
CONTROL-number (that is, any decimal number typed while holding down the CONTROL
key) will cause a CONTROL command immediately following to be repeated that many
times. For example, CONTROL-5 CONTROL-BS will move the cursor left five
positions. This can be used to repeat the BS command as well as CONTROL-BS,
META-BS, CONTROL-SPACE, CONTROL-D, CONTROL-S (finds the nth occurrence),
CONTROL-K, CONTROL-B, CONTROL-L, and CONTROL-R.
CLEAR will delete everything in the line editor.
CONTROL-RETURN will retrieve the last line which was edited, as long as you
haven't typed anything since then. That is, after you activate or CLEAR a line,
if the very next character you type is CONTROL-RETURN, the line is returned to
the line editor. You can send the same line again by just typing RETURN, or you
can edit it. This is very handy when a monitor command, for example, fails
because of a spelling error; you can simply say CONTROL-RETURN, correct the
error, and say RETURN to activate the corrected command. Typing CALL or an
ESCAPE or BREAK command (see Section 2.4) will not prevent a later
CONTROL-RETURN, but any character which is entered into the line editor will
make it forget the previous line.
CONTROL-T transposes the two characters to the left of the cursor. This is
often convenient for bad typists. It is normally considered meaningful except
on an empty line, although it has no effect if there are not at least two
characters to the left of the cursor. Unlike most line editor commands, this
doesn't get you out of insert mode.
The TAB character is treated in a special way by the line editor. Commands like
CONTROL-SPACE treat a TAB as a single character, so a CONTROL-SPACE when the
cursor points to a TAB will move several spaces to the right. Typing a
character without control bits, however, only replaces the first space of the
TAB. There will still be a TAB in the buffer, unless the TAB was positioned so
that it was only equivalent to one space, in which case it goes away completely
when another character is typed over it.
2.3 Line Editor Activation
This section is about the workings of line editor activation: how the line
editor decides to release characters to your terminal input buffer. Normally,
the characters you type are accumulated in the line editor buffer until you type
an activation character, which tells the monitor to send the line you have typed
into your input buffer. The standard activation characters are just RETURN,
LINE, and ALT. (Note: a RETURN typed by the user is automatically translated
into a RETURN plus a LINE, and it is the LINE which is the real activation
character.) User programs can specify additional activation characters by using
the SETACT UUO.
Those CONTROL or META characters which are not meaningful line editor commands
may be activation characters, at the option of the user program. Alternatively,
they may be treated as ordinary characters to be inserted as if typed with META
but without CONTROL. There are two main categories to consider, those control
characters which are line editor commands but not meaningful as such in the
present context, and those which are never line editor commands.
In monitor mode (while typing monitor commands), the rules are always the same:
all line editor commands are enabled; a line editor command which is not
meaningful in the present context (e.g., at the end of a line) has no effect
(note that, e.g., CONTROL-S will "absorb" the following character even in this
case); and control characters which are not line editor commands are treated as
if typed with META, i.e., they are inserted into the line.
The processing chosen by user programs will depend on whether or not they use
control characters as commands. The default processing is to consider all
control characters as activators unless they are line editor commands. All
possible line editor commands are considered meaningful (i.e., don't activate)
except at the end of the line, where CONTROL-D, CONTROL-I, CONTROL-S, CONTROL-K,
CONTROL-TAB, and META-anything activate. If the line is empty, CONTROL-B,
CONTROL-L, CONTROL-T, and CONTROL-R also activate. (The phrase "control
characters" include those with the META bit as well as those with the CONTROL
bit.) The program may, however, suppress activation of some or all control
characters, or suppress the effect of some or all line editor commands. User
program documentation should indicate which control characters, if any, are used
specially by that program. The SETACT UUO is used to control the processing of
these characters. If the user program enables 7-bit characters other than
RETURN, LINE, and ALT as line activators, then your terminal is said to be in
special activation mode. Otherwise it is in normal activation mode. The
program can also disable the CONTROL-RETURN function. Also, programs can choose
to activate on any character at all.
The RETURN character is treated specially by the line editor: the cursor is
moved to the end of the line before the RETURN is inserted. Therefore typing
RETURN always activates the entire contents of the line editor. (Note: this is
true only of a RETURN typed without control bits; also, a RETURN typed while in
insert mode is treated like a META-RETURN and therefore is not moved to the end
of the line.) This special handling of RETURN, the most common activator, makes
it convenient to modify something inside the line and then activate it without
worrying about getting to the end of the line first.
When you type an activation character other than a bare RETURN, the characters
up to and including the activator are available for input to the user program or
the monitor command scanner. Any characters following the activator remain in
the line editor. (This behavior is also subject to user program control via the
SETACT UUO.) The activator is inserted in the line; it does not overwrite the
character which was at the cursor position before typing it.
If the activation character is a RETURN with control bits, what the program sees
is not a RETURN with control bits, but a bare RETURN followed by a LINE with the
corresponding bits. (The system always adds a LINE when you type RETURN; what
is special about this case is that the control bits are moved to the LINE.) In
particular, the code 612 (CONTROL-META-LINE) should not be interpreted by
programs as an end-of-file code if it is preceded by a 015 (RETURN).
When you re-edit with CONTROL-RETURN a line which was activated by a character
other than RETURN or LINE (either an ALT or a special activation character
established by the user program), the original activation character appears in
the line (with its control bits removed), and if the line is then activated by
typing RETURN, the RETURN is not actually inserted in the buffer; the original
activation character is re-used. Any control bits on the RETURN are put on the
re-used original activation character.
2.4 ESCAPE and BREAK Commands
Certain special characters are used to control the status of your display
terminal. These are processed directly by the monitor's keyboard scanner,
whether or not you are in monitor mode. One example, mentioned above, is CALL.
This key stops your program, if one is running, and returns you to monitor mode.
You can also type CONTROL-CALL or META-CALL for a deferred call--the program is
stopped when it tries to read the CALL character from your input buffer. Thus
you can type some commands into a program, followed by a deferred call; when the
program is finished with your commands and asks for more, it will be stopped.
There are several commands using the ESC and BREAK keys. Generally, the format
is ESC or BREAK, then possibly a numeric argument, then a letter or punctuation
character which specifies the command. The characters making up the command are
not echoed and are not entered into the line editor; typing BS while entering an
escape command aborts the entire command. A BREAK command is equivalent to an
ESC command with a negative argument, e.g., BREAK 3 W is the same as ESC - 3 W.
There should be a concise summary of these commands attached to your keyboard;
if not, log in and type this:
HELP DDKEY
(or IIIKEY instead of DDKEY if you are using a III terminal) to print the list
on the XGP.
In the descriptions which follow, upper case letters and punctuation characters
represent keys to be typed, e.g., ESC is the ESC key, and characters like [ and
* are to be typed as indicated. Spaces in the manual separate the keys to be
typed, and do not represent actual spaces to be typed, which would be indicated
as SPACE. Thus, E S C represents three keystrokes. Lower case letters
represent parameters to the commands, so ESC n W means to type the ESC key, then
a number (one or more digits), and then the W key. Letters may be typed in
upper or lower case. Parameters are almost always numbers before the command
letter, as in the last example, but a few commands allow a programmer name as a
parameter, using the syntax ESC [ prg CONTROL-letter where the final letter with
CONTROL key indicates the command name.
ESC O will stop typeout from your program. Any characters already in your
output buffer are deleted, and any attempted typeout from your program is
ignored. The program continues running, however. Typeout is resumed if you
type BREAK O, or if your program tries to read any characters from your
terminal.
It is possible to suspend typeout from your program temporarily without losing
output, as with ESC O. Typing CONTROL-BREAK starts this holding. The word
HOLDING appears at the top of your screen, and the program is stopped if it
tries to type more characters than fit in your output buffer. Holding is
released by typing CONTROL-CLEAR or any line editor activation character. (The
command ESC CONTROL-<minus-sign> also starts holding, this form of the command
being especially useful on displays without the special WAITS keyboard; however,
there are other special commands for holding on such terminals.)
Display terminals are usually in full character set mode, which means you type
in upper and lower case letters normally. You can leave this mode by typing
BREAK F, which causes the case of each letter typed in to be inverted. This
allows you to easily type in mostly upper case text that contains an occasional
lower case letter; use SHIFT only with the desired lower case letter (sic) and
the rest will be in upper case. You type ESC F to return to full character set
mode. On a non-display not in full character set mode, all characters typed in
or out are always forced to be upper case.
The system includes facilities which allow users to see what other users are
doing by "spying" on other terminals. The ESC H command will hide your
terminal, notifying other users that you do not want to be observed. Please
note that it is still possible, although considered rude, to override this
protection. BREAK H "unhides" your terminal.
There is a FILES command which can be typed when in monitor mode, to list the
files in use by your job. So that this information can be seen without having
to stop your user program, typing ESC V will type out this file information.
ESC n V will type out the files in use by job number n, and BREAK n V will type
out the same information for the job controlled by terminal number n. See page
52 for details on what is typed by the FILES command.
Some programs which read data from your terminal expect an "end of file"
indication after the data. The thing to type to supply this signal is
CONTROL-META-LINE.
Sometimes you may want to write a program which you can interrupt with a signal
from your keyboard, without having to keep checking for terminal input in the
program. For example, if you run a program which searches a large data base by
command, you may want to be able to abort a search without stopping the program.
Typing ESC I or BREAK I will generate an interrupt condition which your program
may enable; the use of program interrupts is described in the UUO Manual. You
may type a numeric argument with ESC I or BREAK I; the user program is given the
number you type and is told whether you used ESC or BREAK.
If you want to repeat the same escape command several times, but possibly with a
different numeric argument, the command ESC + will repeat the last escape
command which you gave with a numeric argument, but add one to the argument.
BREAK + will do the same thing but subtract one. (Note that there cannot be an
ESC - command for this latter function because ESC - is equivalent to BREAK.)
With the ESC + and BREAK + commands, what is incremented or decremented is
actually the absolute value of the argument; for example, BREAK 3 V followed by
ESC + does the equivalent of BREAK 4 V.
The command ESC * will repeat the last escape command which had a numeric
argument, without changing the numeric argument. BREAK * will repeat the
command but replacing ESC by BREAK or vice versa. Note that none of ESC *,
ESC +, etc. will repeat an escape command which was given without a numeric
argument.
Occasionally you may find that you are running a program and want to give some
monitor command without stopping your program. To do this, you can type ESC .
to put your terminal into monitor mode, thus allowing you to type commands to
the monitor. Type BREAK . to restore your terminal to user mode so that you can
once again type commands to your program. These commands will type out a blank
line whenever actually changing between monitor and user modes. These commands
also clear your terminal's input buffer before switching modes, on the
assumption that previously typed text was really intended for the mode (monitor
or user program) that you are switching away from. To avoid this clearing of
your input buffer, use an argument of 1 in either of these commands; that is,
ESC 1 . and BREAK 1 . change modes but do not clear text already typed.
You can take advantage of the terminal input buffer clearing done by BREAK . if
you ever want to take back text you've typed but which your program hasn't yet
read. This text is called typeahead. Just type BREAK . which keeps your
terminal in user mode but clears out any typeahead.
2.5 The Wholine
The next set of commands have to do with the wholine, a display of system status
and the status of a particular job on the top two lines of your screen. Once
you start a wholine display, it is automatically updated until you turn it off
explicitly. To start a wholine for the job at your terminal, type ESC W. You
can see the wholine for another job, job number n, by typing ESC n W. Typing
BREAK n W will display the wholine for the job using terminal number n. To turn
off your wholine display, type BREAK W. (Note: this does not actually make the
wholine disappear (except on IIIs) but it makes it quit getting updated.)
Typing ESC W causes your wholine to be updated immediately, even if it was
already being displayed. The command ESC 0 W causes whatever wholine you are
watching to be updated immediately.
One use of the wholine is to keep track of the progress of a job of yours other
than the one at the terminal you're using. To facilitate this, typing ESC Q
will display the wholine of the next job in the monitor's job table with your
programmer name (or with the same name as the job whose wholine you are already
displaying, if any). Typing ESC Q repeatedly will cycle through all such jobs.
BREAK Q does the same thing, except that it searches the job table backwards.
ESC or BREAK Q simulates the typing of ESC n W, where n is the job number it
finds, so that you can use ESC * to force updating of the display.
A final form of the escape command to display a wholine is provided to find the
wholine for a particular user if you do not know his or her job number:
ESC [ prg CONTROL-W where "prg" is the user's programmer name (not project name)
and the square bracket is used to indicate this form of argument. This command
will display the wholine for the lowest numbered job logged in with the
specified programmer name; if the user has more than one job, ESC Q can be used
to find the others.
Here is the wholine format, with descriptions of the various fields.
LOAD DM III DD JBS,TCOR R,RCOR UCOR NL% DSKQ DSKF DATE DAY TIME TEMPF TEMPC
JOB PPN TTY#! QUEUE JOBNAM SIZE RUNTIME-RP XTIME-XP DSK SEG (ALIAS)
The first line is the system wholine:
LOAD decayed average number of jobs running (in TQ or RUNQ)
DM number of high-speed phone lines in use (for Datamedias, etc.)
III number of III terminals in use (maximum=2, where space=0, `-'=1 and
`+'=2)
DD number of Data Disc channels in use (maximum=31)
JBS number of jobs logged in
TCOR total core of all jobs (including those swapped out) in 512-word
pages
R number of jobs actually run in the last few seconds
RCOR total core of the jobs counted in R
UCOR amount of core available for running user jobs
NL system null-time percentage over the last few seconds
DSKQ number of jobs waiting to use the disk
DSKF number of free tracks on the disk
DATE today
DAY day of the week
TIME time of day (24-hr clock)
TEMPF outside temperature in Farenheit
TEMPC outside temperature in Celsius
The second line refers to a particular job:
JOB the job number of the job being displayed
PPN its logged-in project-programmer name
TTY its terminal number (in octal) or DET for detached jobs
# "#" is displayed if the wholine is not for this TTY's job
! "!" is displayed for this TTY's job, if the TTY is hidden (see page
18)
QUEUE the system queue that the job is in (see below)
JOBNAM the program being run
SIZE size of the job's core image in pages
RUNTIME total run time since login, in minutes and seconds
RP RUNTIME expressed as a percentage of the job's total time trying to
run
XTIME incremental runtime, normally reset on terminal input but see below
XP XTIME as a percentage of incremental time trying to run
DSKOPS number of incremental disk operations (reset along with XTIME)
SEGNAM name of upper segment, if any
ALIAS disk PPN (see below), if any
Some of these need more explanation. The QUEUE is an indication of the
immediate status of the job--is it runnable, waiting for input, stopped, etc.
These are the possible queue names:
RUNQ The job is runnable and not waiting for I/O, etc.
TQ This is a high-priority run queue which jobs are in for a short
time after leaving certain kinds of I/O wait.
STOP The job is stopped because it exited, the user typed CALL, or there
was an error in running the job.
NULQ The job has no core image.
IOWQ The job is waiting for some input/output operation, or for the
completion of a SLEEP or JOBRD UUO. In the case of input or
output, you may see instead of IOWQ the name of the device being
used and the direction of the transfer, e.g., TTYO for terminal
output, MTAI for MTA input. (For devices like IMP and DLN, the
fourth letter is always W for Wait regardless of the direction of
transfer.) Also, if the job is waiting for terminal input, you may
see these special pseudo-queue names:
LINE The terminal is waiting for an entire line of input.
CHAR The terminal is waiting for a single character of input.
SNK The program has done a SNEAKW UUO and will read the next
single character of terminal input without removing it from
the input buffer.
DIOW The job is waiting for some I/O operation and will not be swapped
out before it is completed.
INTW The job has suspended itself waiting for an interrupt.
DWQ The job is waiting for a device (e.g., XGP) to be free.
MTQ The job is waiting for the magnetic tape controller.
DTQ The job is waiting for the DECtape controller.
DCQ The job is waiting for the data controller (used for mag and DEC
tapes).
ELFQ The job is waiting for the ELF 10/11 interface.
CMQ The job is not in core and needs to be brought in quickly.
Some special characters may be displayed after the queue name:
- The job is currently running.
* The job is swapped out. A second * means the upper segment is
swapped out.
⊗ The job has been locked in core by the LOCK UUO.
\ The job is running a spacewar module.
Some of the above may not be clear until you read the UUO Manual. The alias is
a PPN used as the default directory for disk files instead of your logged-in
PPN. There is an ALIAS monitor command to set the alias for your job.
XTIME is an incremental run time, measured in minutes, seconds, and 60ths of a
second (a 60th of a second is called a tick). It is normally reset whenever the
program is started by a monitor command other than CONTINUE, and also whenever
the job is awakened by input from the terminal after having been in IOWQ waiting
for such input. Note that if you type ahead, so that the job never enters IOWQ,
terminal input will not reset XTIME. It is possible to inhibit resetting of
XTIME with the BREAK X command (see below). If resetting is inhibited, the
character separating seconds from ticks in the display will be " instead of ' as
it usually is.
BREAK X inhibits resetting your job's XTIME, for example so that you can time
some sequence of commands by using the wholine incremental run time. ESC X
resumes the automatic resetting as described above. Neither of these changes
the current value of your XTIME. Typing ESC 1 X will set your XTIME to zero;
BREAK 1 X will set it equal to your RTIME (total run time). Both ESC 1 X and
BREAK 1 X inhibit automatic resetting, so you have to type ESC X if you want to
restore this.
When a job has not run for several minutes, the ticks part of the XTIME field,
the XP field, and the DSKOPS field in its wholine display are replaced with the
words "Idle n mins" to indicate that the user may have left even though still
logged in. When the job's wholine is displayed in response to an explicit ESC W
or equivalent command, however, the full XTIME and DSKOPS are displayed once
even if the job is idle. Idle time is never displayed in wholines on IIIs.
User programs may add a third line to their wholine display: a display of the
status of a particular file in use by the job. What is displayed is the file
name, extension, PPN, file length in records, USET pointer, and flags (R for
read, W for write, RA for read-alter, U for UDP, E for end of file); this is the
same information typed by the FILES command, page 52. This information is
displayed to the right of the HOLDING message area on the third line of the
screen. This display is started by the SHOWIT UUO, or by ESC 2 X (see below).
The command ESC 2 X will start a file-status display of the first file in the
system's list of files in use by the job whose wholine you are displaying, if it
has no file-status display already, or the next file if it does. The command
can therefore be repeated as necessary to find a particular file. The command
BREAK 2 X will erase the file-status display. Since the file-status display is
associated with the job, rather than just with the wholine display on your own
terminal, these commands are accepted only if the job's programmer name is the
same as yours, or if it is a detached job.
2.6 Page Printer Control
There are two ways of printing on display terminals. To exploit the full
capabilities of the display for graphics, display programs can explicitly
control the positioning of points, vectors, or characters. On III terminals, 16
such display programs can be written independently, and any combination of them
activated or displayed at any time under program control. These display
programs are called pieces of glass. On Data Disc and individual display
terminals, a display program runs only once, and is displayed until erased
explicitly. There are no pieces of glass as on IIIs. On a Data Disc, the
effect of multiple pieces of glass can be gotten in a different way by
displaying more than one channel on the screen (see Section 2.7, which
describes the video switch).
The other way of printing on a display terminal is simply to output text to be
printed in order as if on a piece of paper. The monitor automatically "scrolls"
such output; when the area of the screen being used fills up, the text is moved
up a few lines, with the top part disappearing. Sixteen of these pieces of
paper can be displayed at once, on different parts of the screen. At any time,
one of these pieces of paper must be selected by the program as the one to
receive page printer output. The dimensions of each piece of paper are
controlled by the program, but the currently selected one can also be controlled
from the terminal with ESC commands.
The dimensions of the page printer include several factors. First, the vertical
position of the top line of the page. This can be set by the command ESC n Y
for line n. (Lines 1 and 2 are where the wholine goes; the normal position is
line 4.) ESC Y resets the vertical position to normal.
The scrolling function is controlled by two parameters: the number of lines
typed before a glitch (the upward repositioning of the text), and the number of
glitches on the page. These are set by ESC n L for lines/glitch and ESC n G for
glitches/page. The defaults for these are terminal-type dependent: on Data
Discs, 4 glitches of 9 lines per glitch; on IIIs, 12 glitches of 2 lines each;
and on individual displays, as many 3-line glitches as will fit on the screen.
ESC L and ESC G with no argument restore the respective counts to normal.
(Note: there are BREAK L and BREAK G commands, having to do with the video
switch; those commands are entirely unrelated to ESC L and ESC G.)
It is possible to cause automatic holding, as with CONTROL-BREAK, every n lines
or every n glitches. The commands for this are ESC n E for every n lines, and
ESC n J for every n glitches. At each pause, the word HOLDING will appear on
the third line of the display. CONTROL-CLEAR will resume output as usual. ESC
E and ESC J disable the respective automatic pauses.
Typing ESC N will normalize your page printer geometry. BREAK N will clear your
screen, select piece of paper 0, normalize the page printer, and display the
text in the page at the normal position. To refresh the current page printer
display without changing the page printer geometry, type ESC P. BREAK P will
clear the screen and then do ESC P. These are useful for getting rid of any
noise which may appear on your screen. There is a rarely-used ESC R to refresh
just the display of your line editor buffer.
The command ESC FORM will erase the currently selected piece of paper. Then, if
the terminal is in monitor mode (waiting for a monitor command), it will type a
dot.
Note: Any RESET of your job, either by the RESET UUO or automatically by the
system, eliminates all but piece of paper 0, selects that piece of paper for
further output, and normalizes the page printer display. The UUO Manual
explains the RESET function.
2.7 Data Disc Control
Some ESC and BREAK commands are specific to one of the three kinds of display
terminal. This section is about the commands for Data Discs.
The usual display on a Data Disc screen is green letters (hereafter called
"white") on a black background. It is also possible to display black on white,
by typing BREAK C. To restore the normal white on black, type ESC C. Both of
these clear the screen, so you have to type ESC P to refresh your page printer
display. Black on white display requires increasing the contrast and brightness
controls to be visible. This is not the world's most useful feature; it is also
possible, under program control, to display only part of the screen in black on
white.
Virtual Terminals
The remaining Data Disc escape commands control the connection between your
physical terminal and some virtual terminal defined by the system software. For
all types of terminal other than Data Disc terminals (dialup, hardcopy, III, or
pseudo-TTY), each physical terminal corresponds to a unique software TTY number.
For example, the Teletype in the Prancing Pony is always associated with the
software terminal line called TTY30. This unique correspondence does not exist
for Data Disc terminals. Since there are about 60 physical Data Disc terminals,
and only 31 video channels available for users, not all of the physical
terminals can be used at once; when a user first types on a vacant Data Disc
keyboard, the monitor assigns a virtual terminal line number and associates that
number with the physical terminal. For example, the Data Disc terminal located
near the PDP-10 is TV-66, but it may or may not be associated with virtual
TTY66.
Actually, there are two different correspondences to consider: what appears on a
particular physical screen may not correspond to the virtual terminal controlled
by the associated keyboard. That is, you may be seeing one thing on your screen
while typing at something different. There are escape commands both to
determine keyboard mapping (that is, which virtual line is being controlled by
your keyboard) and to control the video switch. The video switch allows you to
select, from among the 32 Data Disc channels, plus various TV cameras and video
synthesizers, what you want to see on your screen. You can see more than one
Data Disc channel at a time, but only one of the analog channels (the cameras).
You can select an analog channel along with a Data Disc channel only if the two
are synchronized; e.g., the commercial TV signal can't be combined with a Data
Disc channel because the synchronization of the former is not under our control.
In the following discussion, the word "keyboard" refers to a physical Data Disc
terminal keyboard, "screen" to a physical screen, "line" or "terminal line" to a
virtual terminal, and "channel" to one of the video images generated by the Data
Disc controller. A number like TV-102 refers to a keyboard and screen, TTY66 to
a terminal line, and DD2 to a Data Disc channel. Note: all of these numbers are
octal; there is no TTY68!
When a virtual terminal line is created (by typing at an available keyboard), it
is given a Data Disc channel. This is the terminal's "main channel". The job
running on that line may choose to select other channels for viewing in addition
to (or instead of) its main channel. For example, a program which does video
synthesis may choose to display the video synthesizer output on its controlling
terminal line. The channels selected for a particular line constitute the
line's "video map". Actually, each line has both a temporary and a permanent
map; a program RESET cancels any changes to the temporary map and reverts to the
permanent map. (The permanent map does not necessarily select the line's main
channel, although that is the most common case; both temporary and permanent
maps are controlled by the program.) A screen which is watching the video map
of a particular line is said to be "tied" to that line. Normally, when a
keyboard is mapped to a line, the associated screen is tied to the same line.
Just as a terminal line can be hidden to discourage spying (see page 18), Data
Disc channels in use by a job may be public or private. Only public channels
may be selected by other users. The main channel used by a terminal is normally
public. The command ESC H hides (makes private) your terminal's main channel;
BREAK H makes it public.
Keyboard Mapping
Although a keyboard can only be mapped to one line at a time, you may be using
several lines from the same physical terminal and mapping back and forth.
(Note: during the day, when there is a shortage of Data Disc channels, this use
of more than one line is strongly discouraged!) Therefore, at any given moment a
particular line may not have any keyboard mapped to it. However, the monitor
remembers which keyboard is responsible for the line. This is normally the
keyboard which most recently typed a character into the line. (In other words,
if you map to a line and map away again without typing anything into it, you do
not become responsible for it.) It is also possible to claim or disclaim
responsibility for a line explicitly. The concept of responsibility is
important for two main reasons: audio beeps directed to a line (see Section
2.9) are heard at the responsible physical terminal, even if its keyboard is
mapped elsewhere at the time; and the keyboard responsible for a line can map to
it even if it is hidden. When a keyboard becomes responsible for a line for
which some other keyboard was previously responsible, the system also remembers
the previously responsible keyboard, so that if the new responsible keyboard
disowns the line, responsibility for it is returned to the previously
responsible keyboard. However, only one previously responsible keyboard is
remembered.
A keyboard may be responsible for more than one line, but there is always one
line which is the home line for that keyboard. This is normally the first line
into which a previously unused keyboard types, but can be changed by explicit
escape commands.
All of the keyboard mapping commands in this section tie your screen to the same
line they map your keyboard to. Therefore, you will normally see what you are
typing at, unless you give a special video switch command to control the screen
separately.
Usually when you want to map your keyboard, what you are interested in is
mapping to a particular person's terminal line. This is done with the command
ESC [ prg ] where prg is the programmer name of the person you want to map to.
If you only want to look at the person's screen, without the possibility of
accidentally typing at his job, then you can end this escape command with
CONTROL-L instead of "]", that is ESC [ prg CONTROL-L (this doesn't map your
keyboard, it only ties your screen to the other user's terminal line). And if
all you want to do is see the given user's wholine on your terminal, then use
CONTROL-W instead of "]", that is ESC [ prg CONTROL-W. If you want to map your
DD keyboard to a particular line whose terminal number you know, then you can
use the mapping command ESC n M, where n is the line number. For you to do any
of these commands (except the wholine command), the target line must be either
public (see BREAK H above), your own (i.e., you are responsible for it), or not
in use. That is, you cannot map this way to private DD line.
Typing ESC M will map you back to your home line.
The command BREAK M maps your keyboard to the line of another job with the same
programmer name as the one to which you are currently mapped, if there is
another such job on a Data Disc line. This is a good way of mapping back and
forth between two or more DD lines that are logged in under the same programmer
name (either your own or someone else's that you have mapped to with
ESC [ prg ] ). In any case, the line must be public, or your keyboard must be
responsible for it, as in the ESC [ prg ] command.
The command BREAK R maps your keyboard to another line for which it is
responsible, if any. Repeated BREAK R commands will cycle through all such
lines. (Note: there is an ESC R command which is unrelated to this one.)
If you want to get a new DD line, either because you need a second line or
because there are no DD channels available, the command ESC CALL will request
one. If there are any available DD channels, then this command will map you to
a fresh DD line and type a CALL at it, making you responsible for it; you can
then log in. If all the DD channels are in use, then the ESC CALL command will
put you (your keyboard) in the queue of users waiting for a DD channel; it will
also map you to the "available" message (the DD channel seen on unused
terminals), which will display the numbers of the first few keyboards in the
queue. You can then, of course, type ESC M to return to your other line, if you
have one, while you're waiting. When you are placed in the queue, you will hear
a beep to notify you. If you don't get the beep, it means that the queue was
full (this is very rare). Each keyboard can only be in the queue once, even if
you type ESC CALL again. You can leave the queue by typing BREAK CALL, which
will beep you if and only if you were actually in the queue. If you are in the
queue, then when your turn comes to get a free channel, you are beeped again.
You are made responsible for the free line, so you can map to it with the
BREAK R command (if you are mapped to the available message when your free line
arrives, then you will automatically be mapped to the new line). The beeps
associated with entering and leaving the Data Disc queue are not disabled by the
BREAK B command, which prevents other kinds of beeping.
If you get tired of waiting for a DD channel, or need to get something done in a
hurry, and if you're willing to put up with a horrible DD channel, then you can
type ESC ! to get a detached DD channel for normal use, if there are any such
channels. (With luck, all the channels will be working perfectly and so none
will be detached.) Any horrible-looking channel gets detached so that usually
no one has to use it, but if you're desperate enough, then you can use ESC ! to
get one. When you free up the horrible channel, it is automatically re-detached
so that no one else will get it by accident. And if you don't like the first
horrible channel you get with ESC ! then you can type ESC ! again and see what
the next detached channel looks like. While you're using a horrible channel,
there is no reason not to be waiting in the normal DD queue (with ESC CALL) for
a good channel and then moving your job there when you finally get one.
Warning: Some bad channels may not look horrible--they may not work at all, so
you may not see anything if you get such a channel. In that case, you should
just forget the channel (with BREAK CLEAR for example), unless you just want to
type blindly one or two quick monitor commands without seeing the results!
If you want to try out a particular DD channel (detached or not), the ESC n !
command can be given in order to get DD channel n for normal use. This only
works if the particular channel is free when you give the command. When you
free up a detached channel that you got this way, it is automatically detached
again.
Please note that all the keyboard mapping commands apply to your physical
terminal. Most escape commands, like ordinary characters or line editor
commands, apply to a virtual terminal line; for example, a command like ESC W
affects the line to which you are mapped, and claims responsibility for the line
as a side effect. The mapping commands, however, do not affect any line, and do
not make you responsible for the line to which you are mapped. The video switch
commands and audio switch commands, to be described shortly, also apply to your
physical terminal.
The command ESC CLEAR is used to set your home terminal line explicitly to the
one to which you are currently mapped. This home terminal line is the one to
which the ESC M command maps your keyboard. You also become responsible for the
line, if you weren't before. The command is rarely needed, because the default
home terminal line is the first one into which you typed from a previously
unused keyboard. If you lose responsibility for your home line, the system will
assign another of the lines you are responsible for as your home line. (If you
are not responsible for any other lines, your keyboard is considered unused.)
You can lose responsibility because someone else maps to the line and claims
responsibility, or because the line "goes available" a few seconds after the job
on that line logs out. You can also explicitly disclaim responsibility for a
line by typing BREAK CLEAR while tied to (i.e., viewing) that line. This
command should be used when you want to permanently dissociate your physical
terminal from the line, e.g., when you move to another room.
Video Switch Commands
The keyboard mapping commands automatically also tie your screen to the line to
which your keyboard is being mapped. To tie your screen to a different line,
you can specify the line either by the programmer name of its logged-in job or
by the terminal line number. Usually you want to look at a particular person's
line, so you use the command ESC [ prg CONTROL-L which ties your screen to a
line being used by the given programmer. The command BREAK G can be used to tie
to other lines of the same person, since this screen-tying command cycles
through all the DD lines in use by the same programmer name, just as the
keyboard-mapping command BREAK R does. If you happen to know the number of the
DD line you want to tie to, then you can use BREAK n L (note that this is
completely unrelated to the ESC n L command described earlier!). The same
privacy rules which affect keyboard mapping also apply to screen tying.
BREAK L will tie your screen back to the line to which your keyboard is mapped.
When a screen is tied to a line, the program running under control of that line
may modify the video map of the line, and such changes affect any screen tied to
the line. The following video switch commands select a video map for your
screen which is independent of any program selection. After you give such a
command, your screen is untied until you give a tying command like BREAK L.
Video switch commands are generally of the form ESC n x, where n is a channel
number (Data Disc or analog channel) and x is the command letter. The form
BREAK n x interprets n as a terminal line number if n is a valid Data Disc line
number, and selects that line's main channel. (This is not the same as
BREAK n L, which selects whatever channel(s) the specified line has in its map!)
Thus, ESC 30 S selects Data Disc channel 30, but BREAK 70 S selects whatever
channel is assigned to TTY70. ESC x with no number selects the main channel
associated with the line to which your keyboard is mapped. BREAK n x where n is
5 or 6 selects analog channel 40+n. The reason for this alternate notation is
that these analog channels are TV receivers, and the BREAK n x command selects
the sound from the corresponding TV set (see the audio switch section below) as
well as the picture. BREAK x with no number selects the available channel, the
one which is seen by screens not in use. This channel contains a display of
status information for all jobs logged in.
For the remainder of this subsection, the notation { ... } means that the
characters inside the braces are optional, e.g., BREAK {n} S in the next
paragraph means that the paragraph applies both to BREAK n S and to BREAK S
without an argument. The notation [ ... | ... ] means that any of the
characters shown may be used, e.g., [ESC|BREAK] means that the paragraph applies
to both the ESC and the BREAK form of a command. (The two forms are
distinguished by the interpretation of the command argument, as explained in the
previous paragraph.)
The commands ESC n S and BREAK {n} S untie your screen and set its untied map.
(Note that ESC S with no argument is interpreted specially, as explained
below.) The map will not be changed until you give another video switch
command.
The [ESC|BREAK] {n} T commands (note that ESC T is included) are temporary
mapping commands. In addition to the effect described above, they set a flag
bit associated with your screen so that when the program on the line to which
your keyboard is mapped does a video switch RESET operation (either explicitly
or because of a RESET of the job as a whole) you are automatically re-tied to
that terminal as if you had typed BREAK L. The flag is cleared by
[ESC|BREAK] {n} S and by the tying commands (the keyboard mapping commands and
BREAK {n} L).
It is possible to view two or more DD channels at the same time, with the video
images from all the selected channels being `OR'ed together. The commands
[ESC|BREAK] {n} [A|D] add and delete channels to and from the selection that you
are currently watching, after first untying your screen (if tied) and copying
the previous map into your untied map. If a temporary untied map is in effect
(you've done an [ESC|BREAK] {n} T), then this escape command also will be
temporary (i.e., it will be undone when the program on the line you're mapped to
does a display reset).
The ESC S command with no argument is interpreted differently from the other
video switch commands. It ties you to the line to which your keyboard is
mapped, like BREAK L, and also sets that line's temporary and permanent maps to
its main channel (the one assigned to it when it was first typed on). Thus,
ESC S undoes whatever video switch manipulation your program has done as well as
tying you to it. It affects other users tied to the line you are mapped to.
Note that only ESC S has the effect described in this paragraph, not, e.g.,
ESC T. ESC S, like other forms of video switch reset, re-ties anyone who is
keyboard-mapped to your line but untied by [ESC|BREAK] {n} T.
Spying on Hidden Terminals
When someone hides his or her terminal (by typing ESC H), it is considered a
severe violation both of common courtesy and of laboratory policy to override
the hidden status and spy on the terminal, unless at the specific request of its
owner. Occasionally, though, you may want to see your own hidden terminal while
you are in someone else's office, or someone may ask you to override hiding.
For this reason, special escape commands are provided which allow you to map or
tie to hidden lines. These commands are prefixed with the special character
CONTROL-META-TOP-UNSHIFT-BREAK
(that is, the SHIFT and SHIFT LOCK keys must not be down). This character is
known as MAGIC and the commands which use it are magic mapping commands. The
commands are equivalent to ordinary mapping commands, except that they ignore
hiding:
Magic cmd Equivalent normal cmd Function
MAGIC n M ESC n M kbd map to TTYn
MAGIC n L BREAK n L tie screen to TTYn
MAGIC G BREAK G tie to same prg
MAGIC n S ESC n S map screen to DD chan n
MAGIC n A ESC n A add DD chan n to map
MAGIC n T ESC n T temp map screen to DD chan n
MAGIC [ prg ] ESC [ prg ] kbd map to prg
MAGIC [ prg CTL-M ESC [ prg CTL-M kbd map to prg
MAGIC [ prg CTL-L ESC [ prg CTL-L tie screen to prg
When you type ESC H, anyone who is mapped or tied to your line will be mapped to
his or her home terminal line, or tied to the line mapped to if not the same as
yours, even if magic-mapped. But they can repeat the magic mapping command
after you type ESC H.
2.8 III Control
At a III terminal, several different display programs, called pieces of glass
("pog"), may be running at once. You can choose which of these (zero or more at
once) are actually displayed.
ESC n S selects piece of glass number n only. ESC n A adds piece of glass n,
and ESC n D deletes pog n. If no numeric argument is used, these commands apply
to all pogs, e.g., ESC D clears all pogs from the screen.
ESC C eliminates all pogs (your page printer is unaffected). It is different
from ESC D in that the display programs are completely forgotten, so they cannot
be reselected.
Note that the selection of display programs can also be controlled by a UUO in
your program.
2.9 Audio Switch Control
Associated with each Data Disc or III terminal is a loudspeaker which can be
connected to various sound sources under computer control, by an audio switch
analogous to the video switch for Data Disc channels. There are 20 (octal)
audio switch input channels, numbered 0 to 17. Only one channel can be
connected to your speaker at a time.
For Data Disc terminals, the audio switch selection applies to a physical
terminal, not to a virtual terminal line. Program-initiated audio switch
selections affect the physical terminal which is responsible for the program's
terminal line, if any.
The command ESC n U will select audio channel n. ESC U selects channel 0, which
is always silent.
At a Data Disc, the BREAK [5|6] [S|A|T] commands select both picture and sound
from a TV receiver. Specifically, video channel 40+n and audio channel 10+n-1
are selected for n either 5 or 6.
Your program can control the audio switch selection for your terminal by UUO.
Although programs cannot in general change the audio switch setting for another
terminal, there is a BEEP UUO which can be used to cause any terminal's
loudspeaker to be connected to the beep generator for a short time (less than
one second). This is used by, e.g., the SEND command to call the recipient's
attention to a message on his screen. You can permit or refuse such beep
connections by UUO or by escape commands; BREAK B refuses beeps, and ESC B
permits them. Any change to your audio switch setting by other means (e.g., ESC
U) also cancels the effect of BREAK B, so you must repeat the BREAK B command
after changing your selection.
The ESC Z command enables automatic beeping for the job controlled by your
terminal line (virtual terminal for Data Discs), so that you will be beeped
whenever your program runs for 15 seconds or more of real time and then becomes
ready for you to type something. More precisely, if you are enabled for this
automatic beeping, then you will be beeped when your job enters STOPQ, or IOWQ
for TTY input, or INTWQ for TTY interrupts only, provided that your job's
incremental run time plus wait time is 15 seconds or greater. A job's
incremental wait time is the amount of time spent waiting for the system since
the last command was given that caused the program to leave TTY input IOWQ or
STOPQ. This wait time corresponds precisely to the incremental run time
displayed on the wholine--both incremental times are reset at the same instant.
Also, if you type BREAK X or a similar command which causes the incremental
times never to be reset, then you will never be beeped automatically.
The command ESC n B can be used to make a temporary selection of a silent
channel for n minutes. This is useful when listening to the radio, to avoid
commercials or obnoxious songs. This can be prematurely undone with the command
BREAK U.
As we go to press, the following audio switch inputs are connected:
0 silence 10 KDFC
1 bells 11 KSJO
2 (unused) 12 KYUU
3 (unused) 13 (unused)
4 (unused) 14 TV 45 audio
5 beep generator 15 TV 46 audio
6 (unused) 16 silence
7 (unused) 17 KFJC
Audio inputs 14-15 correspond to video inputs 45-46.
2.10 Individual Display Terminals
The WAITS display service, which was designed around the Data Disc and III
displays, is available to users of certain other types of display terminals that
are supported by WAITS. The original such additional supported display type was
the Datamedia, but WAITS now supports several others and new display types are
now added fairly often. The fact that the first display supported was a
Datamedia (or DM) will explain why much documentation tells how to do certain
things on a DM. However, basically anything that can be done on a DM can be
done on the other supported display types, although there will be certain minor
differences that result from the different designs reflected in various
terminals. Supported display terminals of this class (not DDs and not IIIs)
will be referred to as individual display terminals or sometimes as
Datamedia-like or Datamedia-type displays. Almost all the features of Data Disc
terminals (except mapping and audio) are available on individual display
terminals.
Ideally, all displays would have (at least) two extra shift-like keys that would
represent the Data Disc and III keys called CONTROL and META. Any display
keyboard that effectively does have these CONTROL and META keys can be used just
as a Data Disc keyboard (provided the display generates the right codes for
these keys). This is in fact the case for the DM3025 display with the WAITS
keyboard (which looks almost identical to a DD keyboard, but with some
additional keys).
Among displays that don't have WAITS-type CONTROL and META keys, there are two
major classes of supported displays: those with an EDIT key and those without an
EDIT key. An EDIT key is one that enables the user to control the parity bit on
every character sent to the computer; this is a shift-like key held down (as
desired) while another key is struck. Such an EDIT key is the equivalent of the
CONTROL key on Data Discs and IIIs. (Unfortunately, some people call such a key
a "META" key instead of an "EDIT" key, but don't confuse this with the META key
on Data Discs and IIIs -- there is no connection. We will always call the key
that controls the parity bit an EDIT key.)
On a display keyboard with only an EDIT key (instead of CONTROL and META), it is
necessary to type more keystrokes to get the effects normally gotten from using
the DD keys CONTROL and META. On a display keyboard without even an EDIT key
(called a "NOEDIT" display), still more keystrokes are necessary, in general.
However, for both EDIT-key displays and NOEDIT displays, the WAITS system
attempts to make it as easy as possible to get all the DD-type keyboard input
without too much extra typing.
Please note that the control (CTRL) key on most terminals is not the same as the
WAITS CONTROL key. Instead, CTRL is like the WAITS TOP key: it is used to
generate the nonstandard WAITS graphic characters. The CTRL key subtracts 100
octal from the character code normally produced by a character key. For
example, the letter T is octal code 124; CTRL-T is 024, which is ∀ in the WAITS
character set. The command HELP EDKEY will print on the XGP a list of the
correspondences between CTRL characters and the WAITS equivalents, along with
other information about using an EDIT-key keyboard. The command HELP NOEKEY
will print similar information about how to use a NOEDIT keyboard. These tables
printed on the XGP are intended to be cut out and stuck on your keyboard as a
permanent reference guide. The information from these tables is also presented
in Section 2.11 for EDIT displays and Section 2.12 for NOEDIT displays, along
with detailed descriptions of use of these two families of individual displays.
Individual displays are assumed to use standard ASCII characters. Where ASCII
differs from the WAITS character set (see Section 3), the system automatically
converts both input and output.
On display screens that do not have symbols for all 128 of the WAITS characters,
the extra WAITS characters (namely, the ASCII CTRL characters) will be displayed
in a special form. These characters will be displayed as non-CTRL characters
with their emphasis reversed (the emphasis is usually bold, reverse video, or
blinking, depending on the terminal). For example, the character partial-sign
(∂ or ↑O) will be displayed on some terminals as a bold lowercase "o".
The line editor on individual displays works just as on DD and III terminals,
except that there is no line cursor, only a character cursor. However, the
characters in the line editor are displayed with their emphasis reversed (unless
you use TTY NO BOLD), so that you can readily tell what is in the line editor.
When you tell the system that your terminal is a display, it will erase the
display screen and then set the terminal's tab stops (if any) with a message at
the top of the screen. (You only get the message when tab stops are being
set.) When you are holding typeout on an individual display, (even if the
HOLDING message does not appear), your line editor will appear on the HOLDING
message line (the third line of the screen).
The escape commands which are not specific to Data Discs or to IIIs (those in
Section 2.4 through Section 2.6) are available on individual displays too. See
Section 2.11 and Section 2.12 on EDIT and NOEDIT displays, respectively, for
how to type the ESCAPE character.
A special command for use only on an individual display is flush output queues,
which clears the display's priority output queues. This is used to discard
unneeded text that is being output to the terminal. There are five priority
output queues through which the system outputs text to an individual display;
the priority system is used to let more urgent output (e.g., line editor
displaying) interrupt less urgent text (e.g., the wholine). To flush the output
queues, thus saving the time that would have been used to output the given text,
type EDIT-CLEAR (EDIT-↑↑) on an EDIT-key display or CTRL-\ on a NOEDIT display.
ESC 1 CR works on all individual displays to flush the queues. This can be
useful if E or the system is putting out text that you don't care about for one
reason or another.
Two more special escape commands are available only on individual displays, for
limiting user program display output to a specified range of columns on the
display. ESC m < (where m is decimal) suppresses all user display output to the
left of column m, and ESC n > (n decimal) suppresses all user display output to
the right of column n. The only type of output these commands affect is user
program output generated by the UPGIOT UUO (i.e., display program output), and
even then it does not affect output in insert/delete mode nor does it affect
output of RETURNs and LINEs.
Note that ESC 5 < (for example) will suppress output to the left of column 5 and
therefore whatever text already appears in columns 1 to 4 will (normally) not be
erased even when new text appears starting in column 5. However, after an
ESC 40 > (for example) old text in columns from 41 up will usually be erased by
new text at or before column 40 since output of actual text usually causes the
rest of the line to be erased (except when this erase-to-end-of-line feature is
inhibited).
Thus these commands can be used to speed up displaying by E, WHO and other
display programs by suppressing unneeded output.
ESC < resets the left display margin to zero and ESC > resets the right display
margin to infinity. ESC N resets both margins, as does a RESET or DPYCLR UUO.
BREAK > sets the right margin to 0, thus suppressing all display program text.
For some important information on the use of individual displays, including how
to set up a telephone connection to the PDP-10 and how to use a display through
a network, see the file DM.ME[UP,DOC].
Supported Types of Individual Display Terminals
Listed below are the types of display terminals currently supported by the WAITS
system. (See page 32 for a description of the capabilities needed by any new
display type that is to be supported by WAITS.)
Display type Description
DM2500 basic Datamedia 2500 display (tabs are assumed) with EDIT key
DM128 DM 2500 with single-char tape mode mod, displays 128 graphics
DM3025 Datamedia 3025 emulating 2500
DMWAITS Datamedia 3025 modified with the WAITS keyboard and program
C100A Concept 100, version A (local designation: fancy C100)
C100B Concept 100, version B (local designation: plain C100)
TELERAY Teleray 1000 series, with EDIT key
TELERB Teleray 1000 series, without EDIT key
HP2648A Hewlett-Packard 2648A, without EDIT key. (The 2648A support
should generally work for the 2640 and the 2621, although
TTY NO TABS may be needed.)
HEATH19 Heath H19 (also known as Zenith Z19), without EDIT key
TELEVIDEO Televideo 912/920/950, without EDIT key
AMBASSADOR Ann Arbor Ambassador, with EDIT key
ALTOTALK Xerox ALTO running the TALK program, with EDIT key
Each of the above terminal types comes with certain parameter defaults. These
parameters can be changed with various monitor commands and UUOs and with a
special set of login options; the defaults are given below under the login
options. To find out the current settings for your terminal, you can run the
system program TTYSET with the monitor command:
R TTYSET
To find out the settings for someone else's terminal, type the command
R TTYSET;nnn
where nnn is the line number of the terminal of interest.
Here are the display parameters and the monitor commands for setting them. All
but the first command in the table below require that you have already set your
display type. The "[NO]" in various entries below means the the word "NO" is
optional in these commands and determines which state the particular parameter
is set to.
Command Parameter determined
TTY <display> <h> <w> Display type, height and width
TTY PADBAUD dddd Baud rate used for padding calculations
TTY PADCHAR ooo Octal value for character used for padding
TTY [NO] TABS Whether the terminal has settable tabs
TTY [NO] BS Whether the terminal can display rubouts
TTY [NO] WAITS Whether terminal can show control chars (WAITS graphics)
TTY [NO] BOLD Whether to reverse the line editor text's emphasis
TTY [NO] ALTEMPHASIS Which emphasis form to use (3025s only so far)
TTY [NO] ALTBELL Which terminal bell form to use
TTY [NO] HTOGGLE (no-edit-key mode) Whether the holding char should toggle
TTY [NO] EDIT Whether terminal has EDIT key (controlling parity bit)
NOEDIT The terminal has no EDIT key
(The last command above, NOEDIT, is intended to be used if you accidentally get
marked as an EDIT display even though you don't have an EDIT key. In that case
your parity bit will be taken as the EDIT key, making it very hard for you to
type commands. The thing to do then is to type the NOEDIT command to get out of
that state (you probably can't type TTY NO EDIT, depending on what your parity
bit is doing). The NOEDIT command works whether the terminal is generating
even, odd, mark, or space parity.)
You should also read the description of the TTY command in Section 3.2. Some
non-display TTY keywords described there are also meaningful for displays.
In addition to the above, the monitor command
TTY NO <display type>
will tell the system to treat your terminal as a non-display. Any display type
name can be used (from the display-type table above) no matter what your current
display type is.
The command
TTY TABS
will make the system simply reset your tab stops, but without redrawing any
text, in case the tab stops aren't set correctly for some reason.
Finally, the monitor command
TTY INITIALIZE
will make the system re-initialize your display, keeping the display type and
parameters that are already set up. This is useful for resetting the display if
the terminal has glitched, been powered off and back on, etc. TTY INITIALIZE
will simulate a BREAK P to clear the screen and redraw the page printer, as well
as re-initializing the terminal.
Login Options for Individual Displays
You can have the system automatically set your terminal's display type and
parameters when you log in. This is done by putting login options on the line
beginning "LOGIN:" in your OPTION.TXT file; see the general description of login
options in Section 5.1. There are four general forms of the display-type
setting login options. They are:
DISPLAY=<type>
DISPLAY=<type>(<parameter value>,...,<parameter value>)
FDISPLAY=<type>
FDISPLAY=<type>(<parameter value>,...,<parameter value>)
where <type> can be any one of the official display types from the list above,
and any number of <parameter value>'s can be specified from the list below. The
DISPLAY option will make your terminal a display no matter what terminal line
you log in on (unless of course you're on a DD or III), but the FDISPLAY option
will make you a display only if you are coming in on one of the Fast terminal
lines, namely the 1200/150 baud dialup lines and the LLL lines.
For any parameter not specified in the DISPLAY or FDISPLAY option, the default
value is used. If conflicting parameter values are specified in the option, the
result is undefined. If you don't specify any parameters at all, then you get
all the defaults for the given display type, and in this case you should omit
the parentheses that normally surround the parameter list.
Note: If your LOGIN option "line" is too long to fit on one line, you can use
any number of lines, but each line should end at (i.e., with) a comma.
Further note: LOGIN does not validate the display type you specify, it simply
hands the name to the system. If the type is unrecognized by the system (e.g.,
because it is abbreviated to less than 6 characters), then the option will
effectively be ignored -- no warning will be issued.
Now here are the display parameters you can specify in the LOGIN display
options.
Display parameter Aspect determined
HEIGHT=dd decimal height in lines
WIDTH=dd decimal width, should be multiple of 8
PADCHAR=ooo octal code for padding character
PADBAUD=dddd decimal baud rate for padding calculations
TABS terminal has (fixed every 8 or settable) tabs
NOTABS terminal has no tabs
EDIT terminal has an EDIT key (controlling the parity bit)
NOEDIT terminal does not have an EDIT key
HTOGGLE (for NOEDIT mode) make holding character toggle holding
NOHTOGGLE (for NOEDIT mode) holding character never unholds
NOQUOTE (for NOEDIT mode) set terminal input to Normal mode
QUOTE (for NOEDIT mode) set terminal input to Quote mode
ALLQUOTE (for NOEDIT mode) set terminal input to All-Quote mode
BS terminal can display rubout
NOBS terminal cannot display rubout
WAITS terminal can display control chars (WAITS graphics)
NOWAITS terminal cannot display control chars (WAITS graphics)
BOLD reverse the emphasis of text in the line editor
NOBOLD do not reverse line editor emphasis
ALTEMPHASIS use alternate form of emphasis (if any)
NOALTEMPHASIS use regular form of emphasis
ALTBELL use alternate form of bell (if any)
NOALTBELL use regular form of bell
Here are the current defaults for the current possible official display types,
given in the form of LOGIN options explicitly setting all relevant parameters.
Individual Display Types and Their Default Parameters as Login Options
DISPLAY=DM2500(HEIGHT=24,WIDTH=80,PADCHAR=1,PADBAUD=1200,TABS,EDIT,
BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=DM128(HEIGHT=24,WIDTH=80,PADCHAR=1,PADBAUD=1200,TABS,EDIT,
BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=DMWAITS(HEIGHT=24,WIDTH=80,TABS,EDIT,
BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL) ;never padded
DISPLAY=DM3025(HEIGHT=24,WIDTH=80,TABS,EDIT,
BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL) ;never padded
DISPLAY=C100A(HEIGHT=24,WIDTH=80,PADCHAR=15,PADBAUD=1200,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
BS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=C100B(HEIGHT=24,WIDTH=80,PADCHAR=15,PADBAUD=1200,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=TELERAY(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,EDIT
NOBS,NOWAITS,NOALTBELL) ;no emphasis available
DISPLAY=TELERB(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
NOBS,NOWAITS,NOALTBELL) ;no emphasis available
DISPLAY=HEATH19(HEIGHT=24,WIDTH=80,PADCHAR=0,PADBAUD=9600,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=HP2648A(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=1200,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
;HP not currently padded
DISPLAY=TELEVIDEO(HEIGHT=24,WIDTH=80,PADCHAR=177,PADBAUD=9600,TABS,
NOEDIT,HTOGGLE,NOQUOTE,
NOBS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=AMBASSADOR(HEIGHT=48,WIDTH=80,PADCHAR=0,PADBAUD=9600,TABS,EDIT,
BS,NOWAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
DISPLAY=ALTOTALK(HEIGHT=24,WIDTH=80,PADCHAR=0,PADBAUD=0,TABS,EDIT
NOBS,WAITS,BOLD,NOALTEMPHASIS,NOALTBELL)
Special Notes on Various Displays
Here are some notes on idiosyncracies of various supported display terminals.
Output to DMWAITS and DM3025 displays is never padded. However, these terminals
are known to lose during insert/delete line operations when running the WAITS
display service at 9600 baud. Padding doesn't help, but makes it worse.
No emphasis is available on the Teleray terminals, and these terminals can only
display 96 distinct characters (from computer control), so the WAITS graphics
characters that occupy the octal codes from 001 to 037 are displayed as lower
case letters plus the characters "[\]↑←". As a result, there is no way to tell
the difference (just by looking) between the pairs of characters (e.g., "a" and
"↓") that are displayed as the same graphic on Teleray displays. Let the user
beware!
In certain cases, WAITS is not successful in obtaining the correct emphasis
(normal or reverse video) for text on HP2648A terminals. Sometimes the line
editor, which should be reverse video, comes out as normal. However, the
correct text IS displayed in the correct places on the screen -- only the
emphasis form is not always correct. If this proves annoying, use TTY NO BOLD
to make the line editor use normal text.
The HP 2621 and the HP 2640 terminals are expected to work with the 2648A
support (TTY HP2648A), although for one or both of the former terminals it may
be necessary to say TTY NO TABS or to avoid running at baud rates above 1200
(currently no padding is used for HP terminals).
For C100 type terminals, the padding calculations are designed to work correctly
for 9600 baud. However, because the calculations are linear but the C100's need
for padding isn't, lower actual baud rates specified may result in excess
padding (which is expensive at these low baud rates). So if you are running at
1200 baud on a C100, you can get by with TTY PADBAUD 400; and if you are running
at 300 baud, you can probably get by with TTY PADBAUD 0. These padding baud
rates can be specified in your LOGIN option, e.g., FDISPLAY=C100B(PADBAUD=400).
The Ann Arbor Ambassador, which has a variable screen size, is assumed already
to be set to a 48-line screen when initialized by the system. To use a
different size screen, you must locally set the terminal to the desired size and
then inform the system of the size, e.g., with the command TTY AMBASSADOR 24 for
a 24-line screen. An alternate emphasis form of reverse video is available with
the command TTY ALTEMPHASIS.
Display Terminal Capabilities Required for WAITS Support
The WAITS display service can be readily extended to support additional display
types, provided any such new display has certain minimal capabilities. If you
would like to see such a terminal supported by the WAITS display service, MAIL a
message saying so to SYS.
For the WAITS display service to be able to handle a particular terminal, the
terminal must be able to run in Full Duplex mode and should have the following
capabilities, all of which must be executable from the computer (i.e., remotely,
not just locally):
1. Line insert and delete.
2. Character insert and delete (within line).
3. Erase to end of line.
4. Arbitrary cursor positioning (at least relative, preferably absolute).
5. Some mechanism for displaying any of 128 (actually 124 or so) distinct
graphics in a single column; bold, reverse video, blinking (ugh), etc.,
might be used to manage this if the terminal can only display, say, 96
graphics (plus bold, etc.). Actually, while desirable, this "requirement"
has already been waived for certain terminals, so it is no longer required.
It would also be very useful for the terminal's keyboard to be able to
selectively generate the parity bit, as is done with the EDIT keys on
Datamedias; however, this is not necessary, as various NOEDIT displays are
currently supported.
2.11 EDIT-key Displays
An EDIT-key display is one that has an EDIT key which controls the parity bit of
each characters type. The EDIT key is a shift-like key, which, if held down
while a character is typed, causes the character to be transmitted to the
computer with its parity bit on. Since DD and III displays are able to control
two such extra bits on every character (with the CONTROL and META keys),
EDIT-key displays simulate the extra bit with a special escape character. The
EDIT key itself is used to turn on the CONTROL bit directly, but the META bit is
generated on any character by preceding that character with the prefix character
EDIT-NUL. Thus, to type CONTROL-META-x, one types EDIT-NUL and then EDIT-X; the
first keystroke gives the META, and the EDIT in the EDIT-x gives the CONTROL.
The character NUL (000) is used as the ESCAPE character on EDIT-key displays; so
to get ESC W, you type NUL W. Three other characters are also interpreted
specially, namely ↑← (∨, octal 037) means HOLD or UNHOLD (suspend or resume
typeout); ↑C (β, octal 003) means CALL (stop program); and ↑↑ (≡, octal 036)
means CLEAR (clear the line editor). To type any of these three characters
normally to a program (or to the monitor), you must quote the character with a
NUL (or with EDIT-NUL if you want to type META-x for x among ≡∨β). To get a
deferred CALL, you type EDIT-↑C; and to get BREAK, you type NUL and then "-"
(minus sign).
To flush the output queues, type EDIT-↑↑ (also called EDIT-CLEAR, since ↑↑ is
CLEAR).
On a DM2500A with the SUMEX keyboard, there are single keys that send ↑←
(labelled HOLD), ↑C (labelled CALL), and ↑↑ (bottom blank key at keyboard left).
On other keyboards, these keys may have to be typed using the keyboard's ASCII
CTRL key.
For EDIT-key displays that have programmable function keys which cannot store
the EDIT (parity) bit, there are three escape commands available to allow such
programmable keys to set the CONTROL and/or META bits (which otherwise require
the EDIT bit). These bucky-bit-adding escape commands are:
ESC ↑ sets the CONTROL bit on the next character typed,
ESC ~ sets the META bit on the next character typed, and
ESC % sets both CONTROL and META on the next character typed.
Thus ESC ↑ x generates CONTROL-x, ESC ~ y generates META-y, and ESC % z makes
CONTROL-META-z. These three escape commands will automatically quote any
following character except NULL or EDIT-NULL while adding CONTROL and/or META.
In particular, ESC ↑ (say), followed by β (↑C, 003 octal, normally CALL) makes
CONTROL-β, not CONTROL-CALL; similarly the characters ≡ (normally CLEAR) and ∨
(normally HOLD) are automatically quoted by any of these three bucky-bit adding
escape commands. The EDIT bit on the character following any of these three
escape commands is ignored, unless the character with the EDIT bit is NULL (see
next paragraph).
If the character following any of these three escapes is NULL (ESCAPE) or
EDIT-NULL (add META), then the ↑, ~, or % escape command is ignored and the NULL
or EDIT-NULL takes over (affecting the following character). Thus ESC ↑ ESC P
is the same as ESC P, and ESC % EDIT-NULL x is the same as EDIT-NULL x.
The three escape characters ↑, ~ and % were chosen as slightly mnemonic for the
commands, like this: ↑ often represents ASCII control and here is used for WAITS
CONTROL; ~ almost looks like an M as in META; and % has two little circles, thus
representing double bucky, or CONTROL-META. I know these aren't great
mnemonics, but they can be useful for remembering the commands, and anyway
usually only a program that is loading your 7-bit programmable function keys on
an EDIT-key display needs to remember these. These three escape commands are
no-ops except on EDIT-key displays. They don't work on DDs, IIIs, NOEDIT
displays or non-displays.
Now here is a summary of what you type to get certain effects on a display that
has an EDIT key. To get a reference table like this printed on the XGP (for
taping to your keyboard), give the monitor command HELP EDKEY.
To get Type Comments
ESC NUL CTRL-@ generates NUL; NUL W gets you ESC W
BREAK NUL - NUL then minus sign
CONTROL-<char> EDIT-<char> Hold down EDIT while typing <char> (or use
ESC ↑ <char>)
META-<char> EDIT-NUL <char> Two keystrokes (or use ESC ~ <char>)
META-CONTROL-<char> EDIT-NUL EDIT-<char> Two keystrokes (or use
ESC % <char>)
undo ESC or BREAK DEL ESC DEL is a no-op
undo META NUL DEL NUL takes over as ESC, and ESC DEL is a
no-op
CLEAR CTRL-↑ On a DM2500A, the bottom unlabelled key at
left (or MR)
FORM CTRL-L On a DM2500A, use the ↑L key
BS DEL Sometimes called RUBOUT
ALT ESC This is altmode
CALL CTRL-C On a DM2500A, use the CALL key
deferred CALL EDIT-CTRL-C Or EDIT-CALL on a DM2500A
suspend typeout CTRL-← On a DM2500A, use the HOLD key. This
toggles holding.
resume typeout CTRL-← On a DM2500A, use HOLD again
suspend typeout NUL EDIT-<minus sign> This long form doesn't toggle.
resume typeout EDIT-CTRL-↑ Only on a DMWAITS display! Others see next
entry.
flush queues EDIT-CTRL-↑ or NUL 1 CR This flushes the output queues
(EDIT-CLEAR on a DM2500A)
β or ∨ or ≡ NUL <char> Add EDIT to <char> (β or ∨ or ≡) to get
CONTROL-<char>. To get META-<char> or
META-CONTROL-<char>, treat these three
characters like any normal character and
see above.
Note: The DMWAITS terminal (a DM3025 with a DD-like keyboard layout) is
technically considered an EDIT display, but the keyboard can be used almost
exactly like a DD keyboard, with none of the above special translations needed.
One additional piece of information needed is that to flush the display output
queues on a DMWAITS, you can type the PF1 key (which sends ESC 1 CR). The other
PFn keys (from n=5 up) can be used for system character macros (see Section
2.13), since they transmit ESC n CR.
2.12 NOEDIT Displays
Now we'll explain how to use a display terminal that doesn't have an EDIT key,
that is, a NOEDIT display.
A local WAITS display keyboard generates 9-bit characters, including the CONTROL
and META bits, and ignoring for the moment special keys like ESC and CALL. A
display with EDIT key generates 8-bit characters, so about half of all possible
characters can be entered with one keystroke, but META-characters require two
keystrokes. A display without EDIT key, or any other standard ASCII terminal,
generates 7-bit characters, so only about one fourth of all WAITS characters can
be entered in one keystroke. Any single choice of the single-keystroke subset
will make some kinds of typing very difficult, so several input modes are
provided for non-EDIT-key displays:
1. In NORMAL mode, the standard ASCII graphic characters are single-keystroke,
as are the line editor commands and the prefix codes needed to enter
multi-keystroke characters. (In other words, any character which is not
single-keystroke is two-keystroke in this mode.)
2. In QUOTE mode, almost all of the WAITS extended graphic character set is
single-keystroke. Line editor commands are two-keystroke, and other bucky
bit characters are three-keystroke. CALL and HOLD are still
single-keystroke.
3. In BUCKY-QUOTE modes, some combination of bucky bits is single-keystroke.
Unmodified graphic characters are three-keystroke. These modes are not
likely to be used for long periods, but might be useful when typing a
series of commands to E, for example. There are three of these modes:
CONTROL-QUOTE, META-QUOTE, and CONTROL-META-QUOTE.
4. In ALL-QUOTE modes, not even CALL and HOLD are treated specially; all
characters are quoted except a single ESCAPE code. These modes (including
three BUCKY-ALL-QUOTE modes) are not recommended except for programmable
terminals which can easily provide arbitrary multiple-character sequences
on function keys.
Whether one chooses to type normally in NORMAL mode or in QUOTE mode is a matter
of personal preference. NORMAL mode probably requires fewer keystrokes for most
purposes, but QUOTE mode is more similar to EDIT-key typing and may therefore be
easier to remember. QUOTE mode has the disadvantage of requiring some
three-keystroke sequences, but if your terminal has programmable function keys,
that disadvantage can be eliminated.
NORMAL mode for non-EDIT-key displays
In NORMAL mode for a display without an EDIT key, the ASCII control characters
(0-37 octal, denoted as ↑@, ↑A, ↑B, etc.) are used for line editor commands and
for bucky-bit prefixing and other special functions. The intent is to make line
editor commands as easy as possible to type. Each control character has a
standard meaning; certain ones can be redefined as an arbitrary character macro
to accomodate differences among keyboards. The following table shows the NORMAL
mode meanings of all the ASCII control characters, along with their DD/III
equivalents. The asterisk, *, marks a redefinable character; among the things
these chars can be is the ESCAPE character (defaulted to ↑@). The system
program CHRMAC is used to redefine characters as macros (type R CHRMAC). To get
a reference table like that below printed on the XGP (for taping to your
keyboard), give the monitor command HELP NOEKEY.
Data Disc
Char Equivalent NORMAL mode NOEDIT meaning
* ↑@ ESC ESCAPE
↑A αFORM beginning of line
↑B αB backward search
↑C CALL CALL
↑D αD delete forward
↑E αI enter insert mode
↑F αSPACE forward cursor
↑G αBREAK HOLD
* ↑H αBS backward cursor
* ↑I TAB tab
* ↑J LF linefeed
* ↑K VT vertical tab
* ↑L FORM formfeed
↑M RETURN carriage return
↑N (none) numeric arg (see below)
↑O αRETURN recall old line
↑P (none) quote with CONTROL (see below)
* ↑Q (none) quote without buckies (see below)
↑R αR repeat search or kill
* ↑S αS search
↑T αT transpose
↑U CLEAR CLEAR
↑V (none) quote with META (see below)
↑W (none) quote with CONTROL-META (see below)
↑X αK kill (eXpunge)
↑Y αL backward kill
↑Z αTAB end of line
* ↑[ ALT altmode
* ↑\ (none) flush output queues
* ↑] (none) undefined
* ↑↑ (none) undefined
* ↑← (none) undefined
(* means redefinable as a macro)
The DELETE or RUBOUT key does a delete backward, like βBS. On NOEDIT displays,
there is no single key which does βBS at the end of a line and αBS inside the
line.
The ESCAPE character performs the usual WAITS ESCAPE commands as on local
(DD/III) display terminals. (In QUOTE mode, described later, the ESCAPE
character is used both for the usual ESCAPE commands and for additional
functions unique to no-EDIT-key displays.)
The control characters with a DD/III equivalent are translated to that
equivalent on input. Therefore, under some special activation conditions they
will not perform the editing function indicated but will be read by user
programs. Note that none of the ASCII format effectors are used as line editor
commands, but those characters are redefinable. A user whose keyboard has, say,
a VT key might choose to redefine that key to mean something normally harder to
type, e.g., flush output queues. The cost of that redefinition is that an
actual VT could be entered only by quoting.
↑N is used to precede a numeric argument. Specifically, any number of digits
including + and - will be controllified (i.e., get the CONTROL bit added) up to
and not including the first nondigit. Thus, the equivalent of α2α3αD is ↑N23↑D.
There are four quoting characters: ↑Q, ↑P, ↑V, and ↑W. Each of these causes the
following (7-bit) character typed to be quoted and given one of four possible
bucky bit values. ↑Q (mnemonic for Quote) quotes with no bucky bits. ↑W
(mnemonic for DOUBLEyou) quotes with control-meta. The others aren't very
mnemonic, unfortunately, but they quote with CONTROL (↑P) and with META (↑V).
So, for example, β (a real beta) is typed ↑Q↑C.
The only way to undo a quoting character is to type NULL (↑@), which is an
invalid character when quoted. Since all other ASCII characters are quotable,
none can be used to undo a ↑Q etc.
The HOLD character (↑G) can be used in two modes. The default mode is that the
same code toggles holding and unholding, like the HOLD key on an EDIT-key
display. This is called HTOGGLE mode. That mode is most convenient for local
users with fast echo, who should never have trouble knowing whether or not they
are holding. Network users with greater echo delays may prefer NO HTOGGLE mode,
in which the ↑G character always means HOLD, and another character sequence
(ESCAPE ↑G) must be used for unhold. The monitor command TTY [NO] HTOGGLE
selects the holding mode.
The following special functions are normally done by two-character escape
sequences:
Function desired What you think What you type
deferred CALL ESC CALL ↑@↑C
unhold ESC HOLD ↑@↑G (in NO HTOGGLE mode)
QUOTE mode for non-EDIT-key displays
In QUOTE mode, almost all of the ASCII control codes (0-37 octal) are
automatically quoted and therefore are used to represent the extended WAITS
graphics. The exceptions are the following three characters reserved for
special purposes: ESCAPE, CALL, and HOLD. These three characters are treated
the same in QUOTE mode as in NORMAL mode: the CALL and HOLD characters are ↑C
and ↑G, and the ESCAPE character defaults to NULL (↑@) but other ESCAPE
characters can be defined.
All special functions other than CALL and HOLD are entered with a sequence of
characters starting with ESCAPE. In general, ESCAPE followed by an ASCII
control character has the effect that the control character alone would have in
NORMAL mode. For example, ESCAPE ↑S is the line editor search command. The way
to enter arbitrary bucky-bit characters is the three-keystroke sequence
ESCAPE QUOTER CHAR, where the QUOTERs here are the same as in normal mode: ↑Q,
↑P (CONTROL), ↑V (META) and ↑W (CONTROL-META). E.g., ESCAPE ↑V X is META-X.
The sequence ESCAPE ESCAPE is equivalent to ESCAPE. The sequence ESCAPE CALL is
a quoted ↑C, i.e., a beta (β); similarly, ESCAPE HOLD is a quoted ↑G or pi (π).
If you are using an ESCAPE character other than NULL, the underlying graphic
character can be entered with ESCAPE ↑Q ESCAPE, e.g., if you have set up ↑↑ (≡)
as an ESCAPE character, then ↑↑ ↑Q ↑↑ is the way to type ≡ to a program.
The only remaining problem is that the special meaning of ESCAPE applied to
ASCII control codes overrides the usual WAITS escape commands. So far the only
command affected is ESCAPE FORM to clear the page printer. When you type ESCAPE
FORM on a QUOTE-mode display, you simply get a FORM character, unless that
character has been redefined. (If FORM has been redefined, then in QUOTE mode,
just FORM gets you a plain FORM and ESCAPE FORM gets you the redefinition.) To
enter the system ESCAPE FORM command, a QUOTE-mode display user must type
ESCAPE " FORM. If other escape commands are defined for below-40 characters,
the same mechanism will be used to enter such commands from QUOTE mode. The
WAITS escape command ESCAPE n CR, which expands a macro (n is a number), is an
exception in that it does NOT need the " character (since CR is never allowed to
mean anything but CR). So ESCAPE n CR does work to expand a character macro
(ESCAPE n " CR does the same thing) even on a quote-mode noedit display.
The ESCAPE " mechanism is also used to enter the functions deferred CALL and
unhold, which in NORMAL mode are typed ESCAPE CALL and ESCAPE HOLD. In QUOTE
mode you must type ESCAPE " CALL for deferred call and ESCAPE " HOLD for unhold,
since ESCAPE CALL is β and ESCAPE HOLD is π.
Here are some examples of typed character sequences; this table compares what
you need to type to get particular effects in NORMAL and QUOTE modes.
What you type What you type
DD/III equivalent in NORMAL mode in QUOTE mode
CALL ↑C ↑C
E E E
ε (epsilon) ↑Q ↑F ↑F
αε (CONTROL-ε) ↑P ↑F ESCAPE ↑P ↑F
α<SP> (cursor forward) ↑F ESCAPE ↑F or ESCAPE ↑P <SP>
α<CALL> (deferred) ESCAPE ↑C ESCAPE " ↑C
β (beta) ↑Q ↑C ESCAPE ↑C
α<BREAK> (hold) ↑G ↑G
α<CLEAR> (unhold) ESCAPE ↑G (if not HToggle)ESCAPE " ↑G (if not HToggle)
α<CLEAR> (unhold) ↑G (if HToggle) ↑G (if HToggle)
Below are some more examples, this time comparing the Normal and Quote mode
interpretations of given typed strings.
Meaning in Meaning in
What you type NORMAL mode QUOTE mode
↑C CALL CALL
ESCAPE ESCAPE ESCAPE ESCAPE
E E E
↑V E βE (META-E) ⊗ E (circle-x and then E)
ESCAPE ↑V E ESCAPE βE (useless) βE (META-E)
↑B backsearch α (alpha)
↑P adds CONTROL to next char ⊂ (subset)
ESCAPE ↑B ESCAPE αB (useless) backsearch
ESCAPE ↑P (wait for next char) adds CONTROL to next char
ESCAPE ↑P X ESCAPE αX (useless) αX (CONTROL-X)
ESCAPE ↑C deferred CALL β (beta)
ESCAPE " ↑C deferred CALL deferred CALL
FORM FORM (*) FORM
ESCAPE FORM ESCAPE FORM (*) FORM (*)
ESCAPE " FORM ESCAPE FORM ESCAPE FORM
ESCAPE ↑Q FORM ESCAPE FORM FORM
ESCAPE ↑G unhold π (pi)
ESCAPE " ↑G unhold unhold
(*) means that the meaning may be different if FORM is redefined.
BUCKY-QUOTE modes
The BUCKY-QUOTE modes are just like QUOTE mode, except that an ordinary
character gets the CONTROL and/or META bits automatically. For example, if you
are in META-QUOTE mode, just typing X gets you META-X; to get a plain X you must
type ESCAPE ↑Q X.
Typing ESCAPE temporarily suspends the automatic bucky bits, so ESCAPE W means
simply ESCAPE W and not ESCAPE META-W even in META-QUOTE mode. This is
important only for the extended escape commands like ESC [ prg αW, which can be
typed ESCAPE [ prg ↑P W in any no-EDIT-key mode!
The special characters CALL and HOLD get the automatic bucky bits when quoted
with ESCAPE. For example, in META-QUOTE mode, ESCAPE ↑C is META-β. As in
non-bucky QUOTE mode, an ESCAPE character itself can be quoted only by
explicitly specifying the desired bits, e.g., ESCAPE ↑V ESCAPE is the way to get
the ESCAPE character with the META bit in any of the QUOTE modes.
ALL-QUOTE modes
Users of programmable terminals may want to have every ASCII control code be
interpreted as a WAITS graphic, not even excepting ↑C and ↑G, which are normally
interpreted as CALL and HOLD even in the four QUOTE modes. CALL and HOLD are
important enough to be typeable with a single keystroke, but a programmable
terminal allows one keystroke to send multiple characters to the computer.
ALL-QUOTE modes (ALL-QUOTE, CONTROL-ALL-QUOTE, META-ALL-QUOTE, and
CONTROL-META-ALL-QUOTE) are provided for these terminals.
The only difference between an ALL-QUOTE mode and the corresponding QUOTE mode
is that in ALL-QUOTE modes ↑C and ↑G are treated like any other ASCII control.
The following table summarizes the differences:
What you type What you type
Function in QUOTE mode in ALL-QUOTE mode
CALL ↑C ESCAPE ↑C
deferred CALL ESCAPE " ↑C ESCAPE " ↑C
β (beta) (*) ESCAPE ↑C ↑C
hold (**) ↑G ESCAPE ↑G
unhold ESCAPE " ↑G ESCAPE " ↑G
π (pi) (*) ESCAPE ↑G ↑G
(*) In a BUCKY-ALL-QUOTE mode, ↑C and ↑G represent BUCKY-β and BUCKY-π, like
other characters in BUCKY-QUOTE modes.
(**) Or toggling hold/unhold if in TTY HTOGGLE mode.
The ESCAPE character (normally NULL, ↑@) is not quoted even in ALL-QUOTE mode,
since it is necessary to begin the multi-keystroke sequences. If you have more
than one ESCAPE character because of macro redefinition, all of your ESCAPE
characters are unquoted.
Switching modes
Depending on the initial display type you specify to the system, you may start
out in either EDIT mode or NOEDIT normal mode (e.g., Datamedias are assumed to
have an EDIT key). You can switch modes at any time, once you are a display, by
using the ESCAPE ' (single-quote) command, as follows:
ESCAPE ' enter NORMAL no-EDIT mode
ESCAPE 0 ' enter QUOTE no-EDIT mode
ESCAPE 1 ' enter CONTROL-QUOTE no-EDIT mode
ESCAPE 2 ' enter META-QUOTE no-EDIT mode
ESCAPE 3 ' enter CONTROL-META-QUOTE no-EDIT mode
BREAK ' enter EDIT key mode
BREAK 100 ' enter ALL-QUOTE no-EDIT mode
BREAK 101 ' enter CONTROL-ALL-QUOTE no-EDIT mode
BREAK 102 ' enter META-ALL-QUOTE no-EDIT mode
BREAK 103 ' enter CONTROL-META-ALL-QUOTE no-EDIT mode
(The ALL-QUOTE sequences are chosen to be hard to type accidentally, since they
will normally be done only by programmable function keys on intelligent
terminals. However, if you are already in an ALL-QUOTE mode, you can shift to
another ALL-QUOTE mode with a single-digit argument to the BREAK n ' command.)
Now, the only problem is, what if your keyboard can't type NULL, which is the
default ESCAPE character in NOEDIT mode? (It is the only ESCAPE character in
EDIT mode!) You use these monitor commands:
NOEDIT enter NORMAL no-EDIT mode
TTY SETESC nn make the character with octal code nn an ESCAPE
You must be a display to give the NOEDIT command, and a NOEDIT display to give
the TTY SETESC nn command. Once you have established an ESCAPE command which
you can type, you can use ESCAPE ' to adjust your mode further.
The TTY SETESC command without an argument will type out all of your currently
defined ESCAPE characters.
The TTY [NO] HTOGGLE command sets [clears] the mode in which ↑G toggles holding
instead of always entering holding. That mode is orthogonal to NORMAL vs QUOTE,
but it does not survive TTY EDIT (or BREAK ') mode, where only toggling is
available. TTY HTOGGLE is the default.
Restoring EDIT mode (e.g., with TTY EDIT) undoes any NOEDIT character
redefinitions you have done, so a later NOEDIT command will give you the default
meanings for all characters.
Redefining the redefinable characters
For the special case of redefining a character to be an ESCAPE, there is the TTY
SETESC command described above. Other redefinitions must be done by UUO. You
can redefine a character into any sequence of up to 18 (decimal) WAITS
characters.
If you have created another ESCAPE character by redefinition, you can then
redefine NULL (↑@), which is the default ESCAPE. However, you are not allowed
to redefine your only ESCAPE character (otherwise you would be left without an
ESCAPE character).
In general, the characters used in the macro definition are full 9-bit WAITS
characters or escape codes, as typed at a local display keyboard. Therefore,
within the definition, the multi-character sequences are not used. However, the
macro definition may contain special codes equivalent to the four quoting
sequences with and without bucky bits; these codes are meaningful only as the
last byte of a definition, to cause the next character actually typed on the
keyboard to be quoted.
The CHRMAC program (monitor command R CHRMAC) can be used to set up character
redefinitions. It will also save all of your redefinitions in a file so that
you can easily set up your terminal the way you want it; for having this done
automatically when you log in, see the LOGIN program and the CHRMAC option, in
Section 5.1. The CHRMAC program, which can also type out your redefinitions,
documents itself.
What QUOTE mode is good for
QUOTE mode is useful for people who type a lot of the extended WAITS characters
(e.g., ∀∃≤≥αβελ) or who don't want to have to learn a whole new set of line
editor commands (like ↑E for Enter insert mode). In QUOTE mode, almost any of
the extended WAITS characters can be typed in one keystroke, and any line editor
command or bucky bit character can be typed with one of only a few special
character sequences:
ESCAPE ↑P means add CONTROL bit to next char
ESCAPE ↑V means add META bit to next char
ESCAPE ↑W means add CONTROL and META bits to next char
Thus the line editor command αS could be typed as ESCAPE ↑P S. Of course,
someone who wanted to save a keystroke by learning all (or some of) the Normal
mode special functions of control chars could type αS as ESCAPE ↑S. So this
mode works both for people with good memories and for people who like to
simplify their lives.
Both of these users still have to know these two commands too, plus what their
escape character is:
CALL ↑C
HOLD ↑G
Now, one more good use of QUOTE mode is with a display that has programmable
keys. The programmable keys could be set up to send all the common commands,
especially the buckifiers (that add CONTROL and/or META) listed above (ESC ↑P,
ESC ↑V and ESC ↑W), and then the user could type all the special WAITS graphics
(↓αβ∧¬...) directly using their normal ascii-control representations, with only
one keystroke needed per such character, and only two keystrokes for bucky-bit
characters.
If you have a programmable terminal, you may even benefit from ALL-QUOTE mode,
in which even ↑C and ↑G are quoted, and even CALL and HOLD are multi-character
sequences.
On the other hand, if you don't have a programmable terminal, the advantage of
learning the NORMAL mode version of the line editor commands is that any DD/III
character can be typed with at most two keystrokes, and the most common require
only one. Also, you avoid having to think about ESC " which is needed in QUOTE
mode.
2.13 Terminal Input Macros
There are terminal input macros available on all terminals. Such macros make it
possible to type a short string of characters (possibly one character) to get
the effect of typing many characters.
Note: Many programs provide for defining macros within the program. The
macros described here have nothing to do with such program-defined macros.
The definitions of macros described here are maintained by the system and
are available to the terminal user no matter what program is being run
(except see next paragraph).
Further note: No macros can be called from a terminal that is open in image
mode, since all input from such a terminal goes uninterpreted to the job
owning the terminal. In general, no escape commands can be entered from an
image mode terminal, for the same reason.
There are two types of macros available: the ESC n CR macro and the
NOEDIT-display macro. The CHRMAC and GETMAC UUOs are used for defining and
returning definitions of both types of macros.
The system program CHRMAC has general utility functions for defining and reading
macros, including storing and retrieving definitions from disk files and copying
definitions from other terminals. The CHRMAC program documents itself (type
R CHRMAC to run it).
An ESC n CR macro is called by typing ESC n CR on a display or ↑← n CR on a
non-display, where n is a decimal number within the allowed range of numbers
(currently 5 to 20 inclusive) and CR is a carriage return. Some terminals
are or can be programmed to transmit the sequence ESC n CR when a single key
is depressed. In particular, there are 21 such pre-programmed keys on the
DM 3025s with the WAITS keyboard (TTY DMWAITS), including the PFn keys at
the top of the keyboard. ESC n CR macros are available from any terminal,
including PTYs. (Note: Any ESC n CR command where the number n is outside
the allowed range for macros, is reserved by the system for use in entering
special commands.)
A NOEDIT macro is called by typing the single character that is defined as a
macro. Such macros are available only for terminals known to the system to
be NOEDIT displays. ("NOEDIT" refers to the fact that such terminals have
no EDIT key. Most Datamedias do have an EDIT key, which simplifies typing
9-bit characters to the system. For a system-supported display that does
NOT have an EDIT key, NOEDIT macros are available, again for simplifying
typing of 9-bit characters.) For more details on definable NOEDIT macros,
see Section 2.12.
Either kind of macro can be defined as an arbitrary string of text to appear as
if typed from the terminal. The length of any single macro definition is
limited, currently to no more than 18 (decimal) characters. Also, the total
string length for all macros defined for a single physical terminal is limited,
currently to 192 (decimal) characters. The string for a definition is
represented in the form in which it would be typed on a Data Disc terminal, and
therefore normally does not include any special multiple character sequences
(used on EDIT and NOEDIT displays to input a single character). Among the
sequences that will not work inside a macro are commands of the form
ESC " <char> on NOEDIT displays; the desired function should be programmed into
the macro definition instead. However, it is permissible and useful to end a
macro on a NOEDIT display with ESC " (leaving the <char> after the quote to be
typed manually) or with one of the NOEDIT commands that causes the next
character typed to be quoted (with some combination of CONTROL and/or META
bits). Thus a macro (of either kind) can be used to cause quoting of the next
(manually-typed) character on a NOEDIT display.
Macros are not allowed to call other macros. By virtue of the representation
used for macros, it is impossible to define a macro that attempts to call a
NOEDIT macro. It is possible to define a macro that attempts to call an
ESC n CR macro (simply by including the string ESC n CR in the definition), but
such a macro call from within a macro is a no-op. It is ignored. Also, because
of the timing, a macro that does something like BREAK . TIME<CR>ESC . will not
work.
Macro definitions apply to the physical terminal for which they are defined.
For DD terminals, this means the macro definitions go with the keyboard, not
with any line that the keyboard may be mapped to at a given moment. However,
this does not prevent the macro definition from typing text at the currently
mapped-to terminal; that is indeed expected to be a common usage. However, the
association of macro definitions with the physical terminal means that mapping
commands themselves can be included in macros, as can audio switch commands, for
instance. Macro definitions can include essentially anything that you can type
from the terminal (except for macro-calling commands).
Macro definitions go away when the terminal for which they are defined "goes
available" (e.g., 15 seconds after logout). However, for Data Disc terminals,
the ESC n CR macros defined for a DD keyboard go away only when the last logical
line that that keyboard is responsible for goes available.
Macro definitions can include ESCAPE commands (including audio and video switch
commands on Data Discs). However, ESCAPE commands executed from inside a macro
do not affect the saved ESCAPE command and argument that are used and/or
incremented by the ESCAPE/BREAK */+ commands. Thus, if you type ESC 10 CR
followed immediately by ESC *, then the ESC * will repeat the ESC 10 CR command
even if one or more ESCAPE commands (e.g., ESC 12 U) were executed by the macro.
ESCAPE commands to be included in macro definitions should be in a form
appropriate for the terminal involved. In particular, ESCAPE commands on
non-displays should use the non-display escape character ↑← rather than the
display escape character ESCAPE.
3 NON-DISPLAY TERMINALS
Any terminal other than a Data Disc, III, or known individual display is
considered a non-display whether or not it uses a display screen for its output.
A non-display cannot use the special display facilities described in the
preceding sections, such as the line editor and wholines. However, some of
those facilities are approximated by special commands for non-display terminals.
The CTRL (control) key on a non-display does not produce the same codes as
CONTROL on a Data Disc. Instead, it produces codes which, on DD terminals,
represent some of the TOP characters. Most programs which deal with
non-displays, however, either cleverly use only characters which are the same on
all terminals, or have special notations for use at non-displays. In
particular, there is an SOS representation (named after a non-display editor)
for printing characters not found on non-displays, namely a question mark
followed by some other character. See Appendix 10. The CTRL key generally
subtracts 100 octal from the corresponding upper case letter, e.g., CTRL-D is
004 octal, 100 less than D, octal 104. Non-display control characters are
usually echoed as uparrow (or circumflex on some terminals) followed by the
corresponding non-control character, e.g., ↑D for CTRL-D.
There are a few cases in which the same graphic character is represented by
different codes in standard ASCII and in the WAITS extended character set.
Since non-displays have standard ASCII characters, these codes are converted on
input and output. Here are the converted codes:
char WAITS ↔ external
~ 32 ↔ 176
} 176 ↔ 175
ALT 175 ↔ 33
≠ 33 → 33
EOF 612 ← 32
To get the effect of CALL, type CTRL-C twice. (Now you know why CALL on
displays prints ↑C.) Deferred CALL is a single CTRL-C.
Although there are several models of non-display terminal, some do not have
lower case letters. The SHIFT key on these terminals, like the TOP key on our
displays, produces non-alphanumeric printing characters. Most of these are
labelled on the keys, but you may not find [ (SHIFT-K), \ (SHIFT-L), or ]
(SHIFT-M) labelled on some models.
There is no line editor on non-displays. You can delete the last character on a
line by typing RUBOUT, which prints a backslash and then the deleted character.
Successive RUBOUTs will print the characters deleted, until a non-RUBOUT, which
prints another backslash and then whatever you typed. CTRL-U will delete the
entire line, like CLEAR on a display. (There are some non-display escape
sequences for deleting more than just the last single character. These are
discussed in the next subsection.)
If your terminal is actually a display, even though not one supported by WAITS,
and is capable of deleting a character from the screen in response to the output
sequence backspace-space-backspace, you can get the system to use that method of
indicating deletions, rather than the backslash notation, by using the TTY GLASS
command described below. Such a terminal is called a glass TTY.
The end-of-file character for non-displays is CTRL-Z. If your program does
input by TTYUUO, CTRL-Z is converted to 612 (the code for CONTROL-META-LINE,
which is the display end-of-file character). TAB is typed as CTRL-I. FORM is
CTRL-L, and VT is CTRL-K. RETURN, LINE, and ALT have corresponding non-display
keys. (The key for ALT may be labelled ALT MODE, ESCAPE, or PREFIX depending on
when the terminal was built; if none of these appears, type CTRL-[ to get ALT.)
To temporarily suspend typeout, use CTRL-S; and to resume typeout, use CTRL-Q.
CTRL-O flushes typeout like ESC O on a display. A second CTRL-O resumes typeout
like BREAK O.
3.1 Non-display ESCAPE commands
The character ↑← (octal 37, ASCII CTRL-underscore, or CTRL-leftarrow or
CTRL-slash on some keyboards) is used as a prefix for special commands, like ESC
on a display. The ↑← character is not echoed. The following non-display escape
commands are defined:
↑← ↑C send a β (beta, ↑C) to input buffer
↑← ↑O send a ∂ (partial-sign, ↑O) to input buffer
↑← ↑Q send a ⊃ (set-containment, ↑Q) to input buffer
↑← ↑S send a ∪ (set-union, ↑S) to input buffer
↑← ↑U send a ∃ (there-exists, ↑U) to input buffer
↑← ↑Z send a ≠ (not-equal) to input buffer
↑← ↑← send an ∨ (or-sign, ↑←) to input buffer
↑← - negate arg for following command
↑← 0:9 decimal arg for following command
↑← ↑W delete the last word on the input line
↑← C add CONTROL (200) bit to the next character
↑← D add Double-bucky (CONTROL-META, 600) bits to the next character
↑← F full character set
↑← H hide terminal
↑← I interrupt program
↑← L delete back to next character typed
↑← M add META (400) bit to the next character
↑← N No-op, but undo pending bucky bits
↑← R redraw the current input line
↑← V force a FILES command
↑← W force a TTY WHO command
↑← X diddle XTIME, like ESC X on display
↑← Z enable automatic beeping, like ESC Z on display
↑← . put terminal into monitor mode
↑← n CR call a terminal input macro
Lower case letters are the same as upper case. Undefined commands are echoed as
a bell and otherwise ignored.
The first set of special commands are used to "quote" characters which normally
have special meanings on a non-display terminal, namely, ↑C (call), ↑O (suppress
output), ↑Q (unhold), ↑S (hold), ↑U (clear input), ↑Z (end of file), and ↑←
itself. The corresponding WAITS characters are β (003, ↑C), ∂ (017, ↑O), ⊃
(021, ↑Q), ∪ (023, ↑S), ∃ (025, ↑U), ≠ (033, represented by ↑← ↑Z), and ∨ (037,
↑←).
The digits and minus sign are used to create an argument to a following command,
as for ESC on a display. Minus sign is like BREAK on a display. For example,
↑← F turns on full character set mode, and ↑← - F turns it off. The digits or
minus sign are typed between the ↑← and the command character, e.g., ↑← - 2 7 W.
The ↑← ↑W (word delete) command is like a succession of rubouts; it deletes
characters until the first (rightmost) letter or digit, then deletes until the
first character which is not a letter or digit, not including that character.
The deletions will be echoed with the backslash notation or by erasing the
characters deleted depending on the TTY GLASS bit. ↑← n ↑W deletes n words.
The commands ↑← C, ↑← D, and ↑← M can be used to type a character with the WAITS
CONTROL and META bits into your program. C stands for Control, M for Meta, and
D for Double-bucky (CONTROL and META). You can also say ↑←C↑←M instead of ↑←D.
These commands echo as [C] [M] or [D]. The bits are applied to the next
character you type, even if it is a character that would normally have to be
quoted to be input (such as β (↑C)), unless that character is the special
character ↑← itself, which still must be quoted (by itself) even in this case.
If you change your mind, ↑← N will restore the No bucky bit state.
The commands ↑← F, ↑← H, ↑← I, ↑← X, ↑← Z, ↑← ., and ↑← n CR are the non-display
equivalents of the corresponding display ESC commands for those charaters: F
sets the full character set bit, H sets the hidden bit, I interrupts your
program, X diddles wholine incremental runtime, Z enables automatic beeping, .
puts your terminal into monitor mode, and ↑← n CR is used to call a macro (see
Section 2.13). Type a minus sign after the ↑← and before the command character
to invert the sense of the command, e.g., ↑← - H unhides your terminal and
↑← - . puts your terminal into user mode. The I, X, ., and CR escape commands
accept numeric arguments with the same meanings as in the corresponding ESC
commands, which see.
The ↑← R command echoes a carriage return and line feed and then retypes the
text in the current input line; it is useful if the line is full of deletions
and you have trouble reading it.
The ↑← W command types out your job's wholine on the terminal. ↑← n W types job
n's wholine, and ↑← - n W types the wholine for the job using TTYn. ↑← 0 W
types the system wholine.
↑← N (stands for No-op) does nothing, except that if bucky bits have been set by
↑←C, etc., it will echo as [N] and forget the bucky bits. It is also good for
cancelling a ↑← command you've started typing.
↑← n V does a FILES command for job n (your own job if no argument) without
having to stop your program. See page 52. ↑← - n V does a FILES command for
the job using TTYn.
↑← L followed by a character deletes back to that character, like CONTROL-L on a
display. ↑← n L char will do it n times, like CONTROL-n CONTROL-L char.
3.2 The TTY Command
The TTY command provides some of the ESC facilities for non-displays along with
some other control features. It takes as argument a keyword specifying the
thing to change. As in typing monitor commands, only enough letters of the
keyword as necessary to make it unique need be typed. The keyword may be
preceded by NO or - to reset the corresponding switch, e.g., TTY NO TABS or
TTY-TABS. The TTY command is legal from displays as well as non-displays, but
the keywords ARROW, CONVERT, DELETE, ECHO, FILL, GLASS, and WIDTH have no effect
on display terminals. The TABS keyword has no effect on DDs or IIIs. The
keyword WIDTH also has no effect on PTYs which are not network PTYs. You need
not be logged in to give the TTY command, except for the keywords UPDATE and
TIME. (Additional TTY command keywords for individual display terminals are
described in Section 2.10.)
A command of the form TTY TTYn keyword will cause the effect of a TTY keyword
command for TTYn instead of your own TTY. This command is allowed only if the
target TTY is not in use, or is owned by your job, or if you have the DEV
privilege (see Section 6).
Here are the non-display keywords and their meanings (as noted above, some of
these apply to displays as well):
ARROW Causes character codes less than 40 octal to be echoed as
uparrow-letter (e.g., ↑A for octal 001) rather than as the code
itself, except for BEL (7), TAB (11), LF (12), VT (13), FF (14), and
CR (15).
BEEP Enables automatic beeping after long computations, like ESC Z on a
display.
BREAK n xSame as typing BREAK n x on a display (where x is a command letter
and n is an optional number). On a non-display, this works only for
these command letters: F, H, I, V, X, and Z.
CONVERT Enables the WAITS-ASCII character conversions mentioned on page 43.
This is the default state except for PTYs, but can be turned off with
TTY NO CONVERT. This mode is ignored for PTYs; network PTYs always
get conversion, and non-network PTYs never do.
DELETE Disables the interchanging of the two input characters 177 and 010
(WAITS and ASCII backspaces, respectively). The command TTY NO
DELETE, given from a non-display, will make the system interchange
these two input characters. TTY DELETE is the default. The purpose
of NO DELETE is to allow the user to enter backspaces by using an
ASCII backspace key instead of a DELETE key (since on some terminals
the DELETE or RUBOUT key is not conveniently located). In NO DELETE
mode, to enter a DELETE (177) (e.g., to backspace over a character in
the input line), type a ↑H (i.e., ASCII backspace--010), and to input
the character ↑H (lambda on WAITS--010) type a real DELETE character
(i.e., RUBOUT--177). NO DELETE mode has no effect on non-network
PTYs or displays.
ECHO Tells the monitor to send back to the terminal the characters you
type in. TTY NO ECHO can be used if your non-display itself always
prints each character you type (this is sometime called half-duplex).
ESCAPE n x Same as typing ESC n x on a display (where x is a command letter
and n is an optional number). On a non-display, this works only for
these command letters: F, H, I, V, X, and Z.
EXIST n (For wizards) Turns particular terminal lines on or off. Lines are
turned off to prevent them from interrupting the computer and wasting
its time when no terminals are connected to the given lines. Turning
a line on resets it to its default baud rate. TTY EXIST with no
arguments merely lists the lines that are currently on. DD and III
lines are automatically turned on and off by the system when it
notices whether a keyboard is plugged in.
FILL Tells the monitor to insert extra carriage returns when a return is
typed out at the terminal, to give the carriage time to return to the
left margin. This is used principally for 30 character per second
terminals.
FULL Declares that the terminal has lower case letters, and lower case
should not be converted to upper case by the monitor. Equivalent to
ESC F on a display; NO FULL is like BREAK F.
GAG Don't allow messages from other users to be typed out. This is the
default for non-network PTYs.
GLASS Echo rubout as backspace-space-backspace instead of using the
backslash notation for deleted characters.
HANG Hang up the phone line associated with the TTY. This is meant to be
used for some TTY other than your own.
HIDE Hides your terminal, to keep other people from spying on you,
although this can be overridden. See the ESC H command on page 18.
SPEED n Sets the baud rate of the indicated terminal to the given speed.
E.g., TTY TTY37 SPEED 300 sets TTY37 to 300 baud. The baud rate must
be one that the given scanner line is capable of running at, as
determined by tables in the system and the hardware configuration.
TABS Declares that the terminal has hardware tabs, so the monitor will not
convert tabs to spaces on output.
TGAG Prevent messages from other users, like GAG, but only until the next
program reset.
TIME Resets XTIME and inhibits automatic resetting, like ESC 1 X. NO
TIME, like BREAK 1 X, sets XTIME to the total run time.
UPDATE Enables automatic resetting of XTIME, like ESC X from a display. NO
UPDATE is like BREAK X. See XTIME on page 19.
WHO Types out your job's wholine. "TTY WHO n" will type the wholine for
job n, "TTY WHO -n" the wholine for the job using TTYn. "TTY WHO 0"
or "TTY -WHO" will type the system wholine.
WIDTH n Sets the maximum number of columns for terminal output to the decimal
value n, which should be between 16 and 255; however, any width
bigger than 127 represents an infinite width and will completely
suppress insertion of CRLFs in long lines. TTY WIDTH does not affect
displays or non-network PTYs. The default width is 80.
4 BASIC MONITOR COMMANDS
Commands like LOGIN tell the monitor to run particular system programs in your
core image. In this section, monitor commands which do not refer to a specific
program are described. Some of them do not refer to programs in your core image
at all, but are handled entirely within the monitor itself; others run programs,
but allow you to specify the program as a command argument rather than implying
a particular one like LOGIN.
4.1 Running Programs
The RUN command takes as arguments an optional device name, a file name, and an
optional core size argument. If the first argument is not a device name, DSK is
used. The only allowable devices are DSK, SYS, UDPn, MTAn, and DTAn. Running
programs from magnetic tape or DECtape is not recommended. If the file name
does not include an extension, DMP is assumed.
The core size argument, if any, should be a decimal number indicating the number
of 512-word pages desired for your core image. This must be at least as much as
the saved core image, but you can ask for more. Certain programs with variable
buffer space will use as much as you initially allocate. (Programs can increase
their core size dynamically by UUO.)
If you are running from magnetic tape, the core size must be specified because
the monitor cannot determine the size of a file on magnetic tape before reading
it.
The program is loaded into your core image, your job name is set to the name of
the dump file, and the program is started at the starting address specified in
the dump file.
The R command is used for running system programs. Note that R is a separate
command from, and not an abbreviation for, RUN. The command
R FOO 10
is identical to
RUN SYS:FOO 10
The SYS device is actually the disk, but with the special system directory [1,3]
implied. This directory is used to store system dump files. Any PPN given
explicitly with the R command is ignored; the PPN used is [1,3] no matter what.
By using the GET command (abbreviated G), it is possible to load a dump file
into your core image without starting it. This command takes the same arguments
as RUN, but instead of starting the program, it types out a message indicating
the size of your core image and leaves your terminal in monitor mode.
Each of the RUN, R, and GET commands causes a RESET of your job.
4.2 Manipulating Core Images
The following commands refer to words in the Job Data Area (see page 13) of your
core image. These words are generally set up by the monitor or the LOADER. The
UUO Manual has a complete explanation of the Job Data Area.
The CORE command is used to find out or change the size of your core image in
512-word pages. CORE may be abbreviated C. If you include an argument, the
size of your core image will be set to that many pages. If you do not give an
argument, three lines of information are typed out in one of these two forms:
NNN pages JJJ+KKK pages
MMM pages maximum MMM pages maximum
UUU pages user core UUU pages user core
The first form is used if you have no upper segment, the second if you do have
an upper segment. NNN is the current size of your job in pages (no upper); JJJ
is the size of your lower segment and KKK is the size of your upper segment; MMM
is the maximum size allowed for your job (lower segment plus upper segment, if
any); and UUU is the amount of core currently available for use by user jobs
(i.e., core that is not being used by the system). If you give the CORE command
when you are not logged in, you do not get the first line.
The command CORE 0 destroys your core image. It also causes a system RESET of
your job, releasing any I/O devices your program was using, etc.
The way to create core image dump files which can be loaded later is with the
SAVE command. This takes device, file, and size arguments just like GET. This
command also does a RESET, and it does not save your accumulators. Therefore,
the program cannot be continued after a SAVE command, although it can be
restarted.
Dump files on the disk can be copied (in binary mode), renamed, etc., like any
other files and will still be runnable as programs. However, dump files on
DECtape are written differently from other files, and cannot just be copied by
normal file operations. Instead, to store a dump file on DECtape, you must load
it into your core image and give a SAVE command to the monitor.
Unless your core image includes DDT, RAID, or BAIL (i.g., JOBDDT is nonzero),
only the locations up to the address in JOBFF are saved. (This does not apply
if you use a core size argument.) JOBFF is set by the LOADER to one more than
the highest address it loads into, so any core which was allocated dynamically
by your program will not be saved unless the program updates JOBFF. I/O buffers
allocated for you by the system are allocated above JOBFF, which the monitor
then sets to the new first free address.
If your program includes an upper segment which you wish to save, you should use
the command SSAVE. This is just like SAVE in other respects. SAVE never saves
upper segments.
It is possible to examine and alter words in your core image individually by
monitor commands. The command E (examine) with an octal argument will type the
contents of the specified address in octal. The DE (deposit) command takes
three arguments in octal: the left and right halves of the word you want to
deposit, and the address. DE without the address argument uses the address of
the last E or DE command. E with no argument examines the location following
the last one used by E or DE. (Note that the DDT and RAID debugging programs
provide a much more versatile way to examine and modify your core image; and for
SAIL programs, the debugger BAIL can be similarly useful.)
If your core image includes an upper segment (see page 13), you can set or clear
the write protection bit with the SETUWP or CLRUWP commands. You cannot clear
write protection for a sharable upper segment if it is protected against you.
(See the UUO Manual for a complete discussion of upper segment protection.)
These commands also take an optional octal argument, which is used to set the
protection code for the segment if you are permitted to change the code.
4.3 Starting Programs
The following commands refer to words in the Job Data Area (see page 13) of your
core image. These words are generally set up by the monitor or the LOADER
(except for JOBREN). The UUO Manual has a complete explanation of the Job Data
Area.
The START command (abbreviated S) is generally used to start a program at its
normal starting address in JOBSA. This command can also be used with an octal
argument specifying some other address. If the octal argument is preceded by +
or -, the number is added to or subtracted from the program's normal starting
address to determine the desired starting address.
The REENTER command starts the program at the reenter address specified in
JOBREN, if there is one. JOBREN must be set by the program if it wants to use
this capability. Program documentation will explain the use of the REENTER
command for a particular program. An octal argument preceded by + (optional in
this case) or - will be added to or subtracted from the reenter address.
The DDT command starts the program at the address in JOBDDT, if any. This
address is set by the LOADER if any of these debugging programs DDT, RAID, and
BAIL is loaded with your program.
When a program is stopped by typing CALL, by a UUO in the program, or by various
other conditions, the address of the next instruction to be executed is stored
in JOBPC. If the job is continuable (not stopped because of an irrecoverable
error), the CONTINUE command will start it at that address. (The START,
REENTER, and DDT commands will work even if the job is not continuable, except
for certain errors which destroy the core image irretrievably.)
All of the above commands place your terminal in user mode, that is, anything
you type will be processed under control of your program. It is also possible
to start a program, but leave the terminal in monitor mode. In this case you
can still enter monitor commands which do not affect your core image. Monitor
commands which are illegal while your program is running will give the message
Please type ↑C first.
The CSTART command is like START but leaves your terminal in monitor mode. Like
START, it will take the desired start address as an argument or use the contents
of JOBSA. The CCONTINUE command is the monitor mode equivalent of CONTINUE.
There is no such equivalent for REENTER or DDT. With the terminal in monitor
mode, the program can still type output on it, but an attempt at reading from
the terminal will make the job wait (in IOWQ) until the terminal is placed in
user mode.
The HALT command stops your program. The monitor converts the CALL key into
this command, so you should never need to type it explicitly. (You can type it
explicitly, of course, only if you started the program with CSTART or CCONTINUE,
or if you typed ESC . later to put your terminal into monitor mode.)
4.4 Detached Jobs
Normally, any user job is associated with a particular terminal. However, it is
possible to detach a job from its terminal so the job can continue running while
the terminal is used with another job. Also, the monitor sometimes starts up
detached jobs itself to perform various system functions; such jobs are called
phantoms.
Detached jobs can run, and do all the things attached jobs can do, except that
if they try to output to device TTY, the output is lost; attempted input from
TTY makes the job wait indefinitely (until it is attached). Note that there is
no way to leave typed-ahead input text for a detached job to read. If a
detached program executes an EXIT UUO, the job is killed.
The DETACH command detaches your job, leaving your terminal in monitor mode and
not logged in. You can then log in again without affecting the old job. DETACH
takes no arguments. Several commands described below combine the DETACH
function with other useful things; for instance, the FORK and CFORK commands
(see below) detach your current job and get you a new job without your having to
explicitly log in again. Please remember not to leave jobs detached forever,
but to log them out eventually!
The ATTACH command is used to attach your terminal to a detached job. If you
are already logged in, your old job is detached. The ATTACH command takes two
arguments, a job number and the PPN under which that job is logged in. (If you
are already logged in with the same PPN, you need not give the second
argument.) Note that if you were displaying a wholine for your old job, it will
still be displayed, indicating the job as detached. This is handy for
re-attaching it when you want to, in that it shows the job number. (Typing ESC
W again will, of course, display the wholine for your new job.)
If you are logged in and give the ATTACH command with no argument, it will look
for a detached job with your PPN to attach. Repeating the command will cycle
through all such jobs. The command will tell you the job name and number of the
job it finds. This is a simple way to attach back to a detached jobs of yours.
You can actually attach to an already-attached job, as well as to a detached
one. But if the job is already attached to a terminal, then when you attach it
a message is typed on the job's previous terminal telling who has stolen the job
away. If your PPN before typing the command was not the same as the attached
job's PPN, the message will also be typed on the console terminal in the machine
room.
The ATTACH command sometimes requires a password to be typed, namely that of the
PPN of the job being attached. The password will be asked for if you try an
ATTACH command when you are not logged in, or if you are logged in with a PPN
different from that of the job you are trying to attach. A password is also
required to attach a privileged job, unless you already have all its privileges.
If the appropriate password is a remote-only password and you are on a local
terminal, then you may not have to give the password.
You can attach a phantom (not logged in) job only if it really belongs to you
(same PPN as your current job) or if you have the ATT privilege. In either
case, this command will also log in the phantom by turning on the JLOG bit in
its job status word.
The FORK command will detach your old job and log in a new one. It is faster
than DETACH followed by LOGIN, because it does not run the LOGIN program (and
you don't have to give your password again). Instead, FORK merely copies the
system information from your old job into the new job; in particular, FORK
copies your old job's alias to your new job. If you are running a program and
don't want to stop it but do want to use your terminal with a new job, then the
best thing to do is to give the command ESC . (see page 18) to get your terminal
into monitor mode; at that point you can give the monitor command FORK to give
you a new job, detaching the old one without stopping it. If you later use
ATTACH to re-attach to the old job, then you can use the command BREAK . to put
your terminal back into user mode so that you can once again give commands to
the old user program. If you give a FORK command when the system has no more
job slots, then nothing will happen and your terminal will be left attached to
the existing job.
If your program is stopped (e.g., you've already typed CALL) and you want to
continue it but get a new job (as with FORK), then give the CFORK command, which
will continue the old job, detach it, and then get you a new job. If you want
to continue and detach the old job without getting a new job, then give the
CDETACH command, which does exactly that. Thus, CFORK is equivalent to
CCONTINUE followed by FORK, and CDETACH is equivalent to CCONTINUE followed by
DETACH. If your program isn't already stopped and you don't want to stop it
just to do the detach or fork, then you can say ESC . and then DETACH or FORK,
as described in the previous paragraph.
The PDETACH command is just like DETACH, except that it also makes the detached
job a phantom (JLOG bit off) so that it will go away if it encounters an error.
There is no CPDETACH (nor PCDETACH) so if you want to continue the job, you
should do a CCONTINUE command first and then the PDETACH.
4.5 Device Control
Certain I/O devices can only be used by one user at a time, such as a magnetic
tape unit. In some cases, like the XGP, the system provides a facility for
queueing print requests so that individual users need not actually control the
device themselves. However, when a user does need to use such a device, the
ASSIGN command is used to ensure that only one user at a time tries to use the
device. The ASSIGN command (abbreviated A) can also be used to cause a logical
device name to be associated with a particular device. Thereafter, any
reference by your program to the logical name will be translated into the
corresponding physical device.
The command takes two arguments, a physical device name, and an optional logical
name. The physical name can be generic: the command
ASSIGN MTA
will select an available mag tape unit (MTA0 or MTA1) if there is one available.
You can also select a particular unit explicitly.
The logical name feature is sometimes used by programs to allow you to control
their I/O without having to type instructions to the program itself. For
example, a program which produces a listing output might direct it to a
particular filename on device name LST. Before running the program, you could
type
ASSIGN DSK LST
to write the listing file on the disk, or
ASSIGN TTY LST
to type it out at your terminal. You can also change the meaning of what is
normally a physical device name this way--the command
ASSIGN DSK LPT
will make a program which was written to write its output on the line printer
use a disk file instead. You might do this simply because there is no longer a
line printer available directly on the SU-AI system.
The ASSIGN command is used in a special way for User Disk Packs. A UDP may be
used as a public or a private device. In the former case, other jobs may use
the same UDP at the same time, as with the system file disks. A privately
assigned UDP, however, is restricted to the one job which assigned it. (Note: a
privately assigned UDP is still a sharable device, in the sense that the job
which owns it can operate on several files simultaneously, unlike non-sharable
devices like DECtape drives, on which only one operation can be in progress at
any time.) A UDP is normally a file-structured device, with a directory
structure just like the one described for the main file disk in Section 1.5.
However, it is also possible to use a UDP as an unstructured device, in which
allocation of storage on the disk pack is done explicitly by the user program.
This mode of using the UDP is called old mode (because it used to be the only
mode available). The format of the ASSIGN command for a UDP is
ASSIGN mode UDPn logical-name
The optional mode argument can be
PUBLIC public access, file structured UDP
PRIVATE private access, file structured UDP
OLD private access, non-structured UDP
The default mode is PUBLIC. A later ASSIGN command for the same device can be
used to change the mode from PRIVATE to PUBLIC, or from PUBLIC to PRIVATE if no
other jobs are using the device. However, to change into or out of OLD mode,
the device must first be deassigned by all jobs using it. This is because a
particular pack either is or isn't formatted for file structured use, and the
mode given in the ASSIGN command must agree with that of the pack itself. (A
mismatch is not detected when you give the ASSIGN command, but will be caught
when your program actually tries to use the device.) The only exception is that
a file-structured pack may be read, but not written, in OLD mode.
Because of the need to distinguish between the two different UDP formats, your
program will not be allowed to open the UDP unless it is already open or
assigned. Thus, when you first mount a UDP you must ASSIGN it to specify the
mode. When a UDP has been assigned in PUBLIC mode by one job, any job may use
it without assigning it.
We currently have two drives for user disk packs: UDP1 and UDP2. The monitor
treats UDP as a generic device name; the command ASSIGN UDP will select a free
drive if there is one. An ASSIGN command which specifies a particular drive in
PUBLIC mode, e.g., ASSIGN UDP2, will succeed if the particular drive is not in
use or if it is in PUBLIC use. For programming details on the use of user
packs, see the UUO Manual. For instructions on handling and mounting of UDPs,
see page 169.
Once you have assigned a non-sharable device with the ASSIGN command, no other
job can use it until you release it with the DEASSIGN command. This command,
abbreviated D, takes either a logical or a physical device name as argument.
(Note--Assigning DSK or SYS does not prevent other users from using the disk,
since these are sharable devices.) It is possible for a program to use a device
which is not assigned, but the device is released in that case as soon as the
program stops using it. The DEASSIGN command with no argument will deassign all
devices assigned by your job.
Because UDPs can be assigned in a way which permits public access, the DEASSIGN
command for a UDP types a message at your terminal indicating whether or not the
pack can be dismounted. You will not get any such message from DEASSIGN if your
program still has the device in use. For example, if you call out of a program
which is using a UDP and deassign the UDP, it will still be in use by your
program. You can make sure that your program isn't using the UDP (or any other
device) by resetting the program, e.g., with the RESET command. You will then
be told whether or not you may dismount the pack.
The job which has a device assigned may give it to another job with the REASSIGN
command. This command takes two arguments, the device name and a job number.
This can occasionally be useful if, for example, one job writes a tape which
another should then read. The REASSIGN command prevents the possibility of
another job grabbing the tape unit before the intended recipient does.
The FINISH command (abbreviated FINI) with a device name argument releases the
device from your program. If the device is a directory device (such as the
disk) which your program had open for output, the file is closed so that as much
data as the program wrote will be saved. (This applies in the case in which the
program was stopped before its normal exit, either by CALL or by an error.)
FINISH with no argument releases all devices.
The FINISH command may also be given with a job number and possible PPN
argument, like the ATTACH command. In that case, the specified job will have
all its devices released, as if a FINISH with no argument had been typed at its
terminal. The target job is notified, as for the ATTACH command. Also, the
same restrictions about FINISHing phantom jobs apply as for ATTACHing phantoms.
FINISH should be used with care to avoid clobbering files that were being
overwritten by the program, since FINISH will cause any new version of such a
file to replace the old version, even though the new version may be incomplete.
The FLUSH command is used to empty the input and output buffers of a terminal
which is not in use. It takes a device name as argument; the device must be a
terminal which is not in use, or your own terminal. This command may be used
without logging in. A user with the UPG privilege can use this command on any
TTY whether it is in use or not. (Any user may have the UPG privilege, but it
must be enabled specifically before giving the FLUSH command. See the ENABLE
command, page 87.)
4.6 System Information
Several commands exist to find out various things about your job or others.
Some of these duplicate information available on the wholine at display
terminals. None of the commands in this section affect your core image.
The PJOB command types the number of your job, if you give the command with no
argument. If you use a device name as the argument, it types the wholine of the
job using the device. (If the device is not in use, it says so.) The argument
can be a name of the form DDn, to find out who is using Data Disc channel n; you
will be told the TTY line number, if the channel is in use as a terminal's main
channel, as well as the owning job's wholine. If the argument is TTYn and the
specified line is a PTY, then the command types wholines for both the job
running under the PTY and the job which owns it. If the argument is a generic
device name (UDP, DLN, DTA, or MTA) or a 3-character sharable device name (DSK,
PUP, IMP, ELF, or NUL), then the command will type out one wholine for each
instance of the device that is in use, plus a little general information about
the device; in the lines typed out, a number-sign (#) flags the device as
ASSIGNed by a monitor command from that job.
The PPPN command prints out the logged in PPN and the alias, if any, for your
own job (no argument) or the job number you give as argument.
The PTTY command prints out the terminal line number of your own or another job.
If the terminal is a Data Disc, it also prints the channel number and the
responsible physical terminal.
The TIME command, which also takes an optional job number argument, types out
six quantities for the specified job, the first three of which are times in
hours:minutes:seconds'ticks (a tick is one sixtieth of a second):
Total is the total run time for the job since it logged in.
Increment is the run time since the last time a TIME command for this job
was given by the job itself. That is, the Increment time is
reset when you give a TIME command for your own job, but not
when you give one for another job.
Wait is the time the job has had to wait for the system, including
time spent in RUNQ and disk I/O wait, but not tty I/O wait,
STOP, etc. It is somewhat of a measure of the quality of
service the job is getting.
PS (Page-Seconds) is a measure of the demands the job has made on
the system. It is incremented by the job's core size in pages
for every second of runtime.
EBOX msec is a count of the number of milliseconds of runtime as measured
by the KL-10's internal meter. This time may not be equal to
the total runtime reported first, but should be more
reproducible between runs of the program.
EBOX increment is the EBOX count since the last TIME command.
The command TIME 0 types the amount of time since the last system reload, the
clock time of the last system pause (i.e., a service interruption after which
service was resumed without a reload), and the percentage of uptime spent
running the null job (what the system does when there are no real jobs it can
run). It also types some extra information for the benefit of system wizards,
which varies with their interests at the moment and is generally not meaningful
to users, e.g., the percentage of time spent in the monitor at interrupt level.
The DAYTIME command with no argument types the current day of the week, date,
time, and outside temperature in Farenheit and Celsius. With a job number
argument, it types the time that job logged in, the time it was last run, and
the current time. DAYTIME 0 specifies your own job. If the job has been logged
in since the previous day, dates (day of the month) are typed along with the
three times.
The RESOURCES command lists the available system resources: it types the number
of free tracks on the file disk, and the names of free devices (mag tape, etc.)
other than the disk and terminals. A separate line is typed for each UDP drive
unless the drive is detached from the system. The line says "free" if the UDP
is not in use; otherwise it indicates whether it is PUBLIC or PRIVATE; if the
drive has a file-structured pack mounted, its name (pack ID) and the number of
free tracks, as for the DSK device, will be typed if known to the monitor.
(That is, the name will be typed if any input/output operation has actually
happened on that pack since it was first ASSIGNed.)
The FILES command lists disk files in use by a job, with some status
information. It can take a job number argument (0 or no argument means your own
job), in which case all files in use by that job are listed, or a filename
argument, in which case the status of the specified file is displayed (if it is
being used by one or more jobs). Each line typed by this command contains the
job number of the job using the file; the filename, extension, and directory ppn
of the file; the number of records in the file; the number of the record
currently being read or written; and the way the file is being used: R for read,
W for write, or RA for read-alter, possibly followed by E for end-of-file seen.
The letter U indicates that the file is on a UDP.
The HELLO command types the name of the current version of the monitor.
All of the above commands are legal when you are not logged in.
4.7 Miscellaneous Commands
The ALIAS command is used to set your job's disk PPN or alias. If you have an
alias, all disk references by your job which do not include an explicit PPN will
use the alias directory rather than your logged-in PPN directory. The argument
can be PRJ,PRG to set the alias to that PPN, or just PRJ to use your login
programmer name in the alias. An argument of PRJ, (i.e., with a comma but no
prg) uses your old alias programmer name. No argument resets your alias to
zero, so your logged-in PPN will be used for disk files. If you have an alias,
your logged-in PPN is still checked for file protection purposes. ALIAS doesn't
override the protection of any files in the area you alias to -- use the ACCESS
command (see page 86) if you need to get to protected files (ACCESS requires
you to type the directory's password).
The TALK command can be used to talk to a user at another terminal. It takes a
programmer name or device name as argument. The device must be a terminal. If
a programmer name is used, the system will look for a terminal in use by that
programmer; there must be exactly one such terminal which is available for
talking. If there are several such terminals, they will be listed and you must
select one by device name in another TALK command. A terminal is not available
for talking if it is gagged (i.e., the user has used the TTY GAG command, or the
program running at the terminal has gagged it by UUO), if it is open in image
mode, if it is holding output, or if it is a display whose currently selected
piece of paper is smaller than 15 lines high or is not activated. (Note to
remote users: There is no operator on this system; TALK CTY is not a good way to
get assistance!) If the command succeeds, all characters you type are typed out
on the other terminal, and vice versa. If the terminal you specify was already
in a talk ring, you are added to the ring; all characters typed at any terminal
in the ring appear on all the others. You leave the talk ring by typing CALL.
You must be logged in to enter a talk ring; if you are not logged in and want to
talk to someone, use the SEND command to send that person a message to that
effect.
If the argument to the TALK command contains the character @ or %, then it is
taken as a network user at a remote host. In this case, a program is run to
establish the talk connection, destroying your former core image. Local talking
does not affect your core image.
The KILL command can be used to kill another job. It takes the job number and
PPN (if different from your own) as arguments. (The KILL command cannot be used
to kill your own job; use the KJOB command for that.) The RESET command resets
the specified job, or your own job if no argument is given. Resetting a job
primarily causes all of its device usage to be aborted (e.g., open files get
closed and new files that were being written are discarded); resetting also
normalizes other facets of the job, including its display and its interrupt
enablings. Needless to say, both of these commands are dangerous and should not
be used on a job unless you are sure you want to affect that job's operation.
They are included to control runaway jobs which cannot be stopped normally,
e.g., because they are detached. These commands can be given for any job by any
logged-in user. If the job's PPN does not match your own PPN, the command is
logged on the console terminal. Note: unlike the FINISH command, these commands
do not close (and preserve) files being written by the affected job.
The QUIT command can be given from a network PTY to make the WAITS server close
the network connection. If you are still logged in when you give the QUIT
command, your job will be detached; so usually you should log out first.
Actually, logging out itself normally does a QUIT for you automatically, unless
you use the /O switch or the /OPEN logout option; see Section 5.2 for details
on LOGOUT's closing of network connections.
A user who wishes to run a long compute-bound program unobtrusively in a sort of
background mode can enable the "Negative Service Level" privilege, NSL, for the
given job. This means that the job will be run only when there aren't any
normal (non-NSL) jobs trying to run. Therefore an NSL job will not bog down the
rest of the system (it will, however, increase the actual load average by 1,
since presumably it will be in the RUNQ all the time). NSL can be enabled and
disabled by anyone with the monitor commands:
ENABLE NSL
DISABLE NSL
and the NSL privilege (4,,0 bit in the passive privilege word) can be enabled or
disabled by the SETPRV UUO from any program. Although NSL is in the privilege
word, it is really just a status bit for the job in question. The NSL
"privilege" is not copied to a new job started by FORK. However, it is copied
to a new job started by the SWAP UUO. The WHO program displays "NSL" for any
job that has the NSL privilege enabled.
The ELFQFIX command is used to unwedge the system if it gets confused about who
is using the sharable ELF device. If your attempts to use the ELF always leave
you in ELFQ for a long time, then giving this command should correct the
situation. This command takes no arguments and is designed to make sure that it
can't do any harm; it will tell you if it is successful.
5 SYSTEM PROGRAM COMMANDS
The remaining monitor commands all run particular system programs in your core
image. There are a few main groups of these commands and a few miscellaneous
ones. These commands are documented along with the programs they run. The next
two subsections are about the LOGIN and LOGOUT programs and the commands which
run them; these were briefly introduced earlier. The major command groups are
then presented, and finally the miscellaneous system programs. Many system
programs are not run by special monitor commands, but by the R command. Those
programs are not documented here, but many are documented online in disk files
on [*,DOC] areas. The general way to find the online writeup for a program
called PROG is with the command READ PROG, which runs E and searches for the
appropriate file documenting PROG. The command READ HOW will edit the HOW file,
which provides introductions on the use of many system programs.
5.1 LOGIN
The LOGIN command is used to begin a session of using the computer. It runs the
LOGIN program, which provides several optional services as well as setting up
the necessary system tables for your job.
The LOGIN command may be abbreviated L. It takes one argument, a
project-programmer name. Different characters used between the two parts of the
name are used for different options:
PRJ,PRG types all system messages and processes OPTION.TXT (see below)
PRJ/PRG types system messages new since last login, processes OPTION.TXT
PRJ.PRG types no messages, ignores OPTION.TXT; for fast login
PRJ%PRG sets new password, as explained below, then acts like PRJ/PRG
PRJ!PRG requires password even if at local terminal (see below); like
PRJ/PRG
The PRJ can be omitted, in which case project 1 is implied. If the delimiter
before the PRG is also omitted, 1/PRG is implied.
System messages are notices for all users, sent by the MAIL * command and stored
in the file NOTICE.TXT[2,2]. There may also be messages addressed specifically
to you. The handling of your personal mail is explained below.
Before typing any other messages, and regardless of the option used, LOGIN will
notify you if you have any other jobs logged in. If you have a detached job
logged in, you will be beeped. LOGIN will list the job number, PPN, TTY, and
job name of any job with your login programmer name.
It is possible to set a password and file protection codes to restrict access to
a particular PPN. If the PPN you specify to LOGIN has a password, LOGIN types
Password= and you must type the correct password to log in. Echoing of input
characters is turned off so the password does not print. Passwords may be one
to six letters or digits followed by RETURN.
To protect files from unauthorized access, there is a protection code associated
with each file. The code specifies the access allowed to the file for its owner
(i.e., a user logged in under the file's PPN), for other logged-in users, and
for not-logged-in users (using the monitor commands allowed without login). You
can set the protection code for a file using the COPY program (see Appendix 2).
However, you can use the LOGIN program to set the protection code of your file
directory itself and the default protection code which is assigned to new files
created in your directory if the program writing the file does not specify a
value explicitly. (These two protections and even the password for a directory
can also be set with the UFD command; see page 86.)
If you use % as the delimiter between the project and programmer names when you
log in, LOGIN will give you the opportunity to change your password, the file
directory protection, and the default protection for new files. If you ask to
change your password, you will be asked to type the new password twice to guard
against typing errors, since the password will not be echoed. The protection
codes are entered as three-digit octal numbers, with the following meanings:
Bit Meaning in directory protection code
400 password is for remote logins only (see below)
200 unused
100 owner can't write files
040 logged-in users can't change protection of files
020 logged-in users can't read directory or any files
010 logged-in users can't write any files
004 not-logged-in users can't change protection of files
002 not-logged-in users can't read directory or any files
001 not-logged-in users can't write any files
Bit Meaning in file protection code
400 don't dump this file (see DART, Appendix 5)
200 delete protect (see COPY, Appendix 2)
100 owner can't overwrite this file
040 logged-in users can't change protection of this file
020 logged-in users can't read this file
010 logged-in users can't overwrite this file
004 not-logged-in users can't change protection of this file
002 not-logged-in users can't read this file
001 not-logged-in users can't overwrite this file
Although there is a lot of complicated detail here about file protection, please
bear in mind that the system is not meant to be totally secure, and that most
users do not protect their files at all. The default directory protection is
005, meaning that all logged-in users have read and write access, and
not-logged-in users have read access. Also, there are both official (see the
UNPROTECT command, page 86) and unofficial ways to get around file protection.
Protecting a file simply guards against unintentional access and notifies polite
users that you wish to keep the file private.
When you log in with %, you can also add your directory to one of several file
access groups. Membership in such a group means that you want to allow anyone
with the corresponding file access privilege to have owner access to your files,
as if he or she were logged in under your PPN. For example, there is a SYS
group for system files; such directories as [SPL,SYS] (for spooler files) are in
the SYS access group, and the people in charge of system programming have the
SYS access privilege. This mechanism allows users who work together on some
project to share one another's files without allowing other users access to
them. File access privileges, like all privileges, are assigned by system
programmers. A special case is the MAS (master) file access group. The MAS
privilege is automatically assigned to all PPNs with project name 1, but is
effective only for access to directories with the same programmer name. That
is, if you have a directory named [XYZ,PRG] and you give it the MAS access group
attribute, you will have owner access to it when logged in as [1,PRG] but user
[1,ABC] will not have owner access to it. This facility allows you to organize
your files into several directories, but still have owner access to all of them
while logged in under project 1. Remember that, although your project 1 PPN
automatically has the MAS privilege, you must explicitly enter your other
directories in the MAS access group for this facility to operate.
If the 400 bit is on in the protection code for a file directory, the password
associated with that area is used only for logins from a remote site; no
password will be required for local login on that PPN. (Note: if you log in
locally without a password, you will not be given any privileges to which you
would otherwise be entitled, including file group access privileges such as MAS.
You can use the delimiter ! between your PRJ and PRG to force LOGIN to ask for a
password, to get your privileges. You can also use the ACCESS command after
you've logged in to get your privileges by giving your password; see page 86.)
Remote login is not allowed on a PPN which does not have a password; thus, if
you want to be able to log in remotely but do not want to have to type a
password for local login, you can set the 400 bit in your directory's protection
code.
The further details of LOGIN's operation are controlled by a file named
OPTION.TXT which you may have in your directory. If there is one, it is
searched for a line of the form
LOGIN:opt1,opt2,opt3;comments
where opt1...optn are the desired options. Only the first six letters of an
option name are read. Upper or lower case is okay. Options may actually be
divided over several lines; end all but the last such line with a comma. A
(required) semicolon ends the option list. Several other programs use this
OPTION.TXT file, looking for their own option lines.
The LOGIN options are as follows:
DISPLAY=... Sets your display type and display parameters to those specified
immediately following this option name. For complete details, see
page 30.
FDISPLAY=... If you are on a high-speed dialup line, this sets your display
type and display parameters to those specified immediately
following this option name. For details, see page 30.
NOMAIL Suppresses any questions about message files. This is for people
who like to type ahead while LOGIN is running. The exact effect
depends on what other options are used; see below.
XMAIL Prevents notification about a message file for you if the file was
last written by you (same programmer name), unless it was written
by a program named MAIL. In other words, it does not tell you
about a message file which you have already edited since the last
new message for you.
MESSAG Types your mail without asking; see below.
NONOTE Prevents typing out system messages from NOTICE.TXT[2,2].
GRIPE Types out new gripes just like new system messages.
BEEP Enables the system feature of automatic beeping whenever your job
finishes doing something that took more than 15 seconds of real
time. Like ESC Z.
AUDIO=n Selects audio switch input channel n to your speaker if you are at
a DD or III terminal. "n" is an octal number. If n is greater
than 1000 octal, channel n-1000 is selected with beep
interruptions disabled.
RPGSAV Restores your TMPCOR files for SNAIL commands remembered from the
last time you were logged in. You must also have the RPGSAV
option specified for LOGOUT. This option will be explained more
fully in the LOGOUT section.
EINIT This makes LOGIN write a TMPCOR file which will cause the editor E
to execute your entire EINIT.CMD file (on your login disk area)
upon startup. READ E for details.
EINIT(n:m)This makes LOGIN write a TMPCOR file that will cause E to execute
pages n through m of your EINIT.CMD file upon each startup.
EINIT=\...\ This, the general form of this option, allows you to stick any
command text you want into the TMPCOR file that E executes on each
startup. The character "\" is an arbitrary delimiter not
occurring in the command text shown here as "...". The command
text uses E's standard macro text representation, e.g., "⊗C" means
carriage return. The text must not exceed the maximum allowable
length (currently 50 characters); any longer string should be put
into an EINIT.CMD file and executed from there (e.g., with one of
the other EINIT option forms above). READ E for more details.
CHRMAC=file Allows you to have terminal input macros defined automatically
upon login. (For more details on terminal input macros, including
how to define and call them, see Section 2.13). The file named in
this option is the macro definition file from which the macros are
to be loaded. If "=file" is omitted completely, then the default
filename is used. If a filename with no extension is given, then
the default extension is used. The default filename and extension
are the same as for the system program CHRMAC (which is used to
define macros), namely, CHRMAC.CHR. The format of the macro
definition file is exactly that which is used by the CHRMAC
program. Thus you should use the CHRMAC program (R CHRMAC) to
create the macro definition file that you want LOGIN to read.
Note: It is possible to have LOGIN load macros from two or more
such files: simply include two CHRMAC options, one or both
followed by a filename. The files will be read in the order
given. Further note: Any NOEDIT macros to be loaded must come
from a CHRMAC option that occurs AFTER any DISPLAY (or FDISPLAY)
option that marks the terminal as a NOEDIT display. NOEDIT macros
cannot be defined on a terminal that is not a NOEDIT display; such
definitions will simply be ignored.
DIGEST Tells you if there is a new Associated Press news digest that came
in after the last time you logged in and asks you if it should
type it out.
XDIGEST Always types the A.P. news digest if there is a new one since you
last logged in, without asking and independent of any other option
setting.
REMIND Looks for a special file under your name on [2,2], and if the file
exists, types it out and then deletes it. The name of the file
for a user named FOO is " FOO.RMD[2,2]", also sometimes called
∂FOO.RMD.
QMAINT Only types maintenance forecast if it has changed since your last
login. Otherwise the maintenance forecast is always typed unless
. is used as the PPN delimiter.
DETACH Enables the DET privilege for your job, to tell the system that
you would prefer to have your job merely detached instead of
killed when autologout (see page 5) is ready to strike your job.
ME Tells you your fortune.
COOKIE Alternate fortune cookie selection. See which you prefer.
SYSTAT Types out a line indicating how many jobs are logged in and how
many are running, to give an idea of system load.
LOGRUN Runs the LOGRUN program, which executes monitor commands from a
LOGRUN entry in OPTION.TXT; see below for details.
INIT Runs the file INIT.DMP in your directory after login.
RUN=file Like INIT, but runs a program named explicitly in the option, from
default device SYS, e.g., RUN=LOGRUN is the same as LOGRUN, and
RUN=DSK:INIT is exactly like INIT (since DSK is specified as the
device, your own PPN is the default in this case).
PORNO Try it and see.
GAG Tells the system not to allow other users to send messages to your
terminal or to link to you with the TALK command. Like TTY GAG.
NOGAG Tells the system to allow other users to send messages to your
terminal or to link to you with the TALK command. Like
TTY NO GAG. This is the default.
WHO If you are at a display, starts a wholine, unless there is already
one going. (Like ESC W, unless you aleady have a wholine.) This
option must come after any display option present, such as DISPLAY
or FDISPLAY, in order for your terminal to be known as a display
by the time the WHO option is encountered. This option is now the
default.
NOWHO Tells LOGIN not to turn on your wholine for your display (if any).
Without this option, if you are at a display LOGIN will turn on
your wholine unless it is already on.
HIDE Hides your terminal from the spying programs PK and PPK, like
ESC H.
UNHIDE Allows spying programs to view your terminal, like BREAK H. This
is the default.
BOW If you are at a Data Disc display, tells the system to display
piece of paper output in black on white (actually green on white)
instead of the reverse. Not very useful, since any special
display output will still be green on black.
NOBOW Display white on black (well, green on black). This is the
default.
WIDTH=n If you are at a non-display, sets the maximum number of columns
for terminal output to the decimal value n, which should be
between 16 and 255; however, any width bigger than 127 represents
an infinite width and will completely suppress insertion of CRLFs
in long lines. WIDTH is ignored on displays and non-network PTYs.
The default width is 80. Like TTY WIDTH n.
FULL If you are at a non-display, sets full character set mode. Like
TTY FULL; see the ESC F command on page 18.
NOFULL If you are at a non-display, clears full character set mode. Like
TTY NO FULL; see the BREAK F command on page 18.
TABS Unless you are at a DD or III, this clears the tab expand bit;
tabs will not be converted to spaces on output. Like TTY TABS.
NOTABS Unless you are at a DD or III, this sets the tab expand bit; tabs
will be converted to spaces on output. Like TTY NO TABS.
FTABS If you are on a high speed dialup line, clears the tab expand bit;
tabs will not be converted to spaces on output. Like TTY TABS.
FNOTABS If you are on a high speed dialup line, sets the tab expand bit;
tabs will be converted to spaces on output. Like TTY NO TABS.
CONVERT If you are at a non-display, tells the system to convert between
WAITS and ASCII character codes, like TTY CONVERT. This is the
default.
NOCONVERT If you are at a non-display, tells the system not to convert
between WAITS and ASCII character codes, like TTY NO CONVERT.
GLASS If you are at a non-display, tells the system to output
backspace-space-backspace whenever you backup over an input
character, in order to erase the deleted character. Like
TTY GLASS.
NOGLASS If you are at a non-display, tells the system not to use
backspace-space-backspace to erase input characters. Like
TTY NO GLASS. This is the default.
DELETE Disables the interchanging of the two input characters Delete (177
octal) and ↑H (λ, 10 octal). Like TTY DELETE. This is the
default.
NODELETE Enables the interchanging of the two input characters Delete
(WAITS backspace character, 177 octal) and ↑H (WAITS λ, ASCII
backspace character, 10 octal), so that ↑H can be used as
backspace. Useful if the Delete key on your keyboard is not
conveniently located. This command is meaningful only on
non-displays. Like TTY NO DELETE.
FILL If you are at a non-display, sets the fill switch to insert extra
carriage returns on output to give the carriage time to get all
the way back. Like TTY FILL.
NOFILL If you are at a non-display, clears the fill switch thus
suppressing insertion of extra carriage returns on output. Like
TTY NO FILL.
ECHO If you are at a non-display, tells the monitor to send back to
your terminal the characters you type. Like TTY ECHO.
NOECHO If you are at a non-display, tells the monitor not to send back to
your terminal the characters you type. Like TTY NO ECHO.
ARROW If you are at a non-display, tells the monitor to type out
characters below octal 40 as uparrow-letter (e.g., ↑A) rather than
the character itself except for BEL (7), TAB (11), LF (12), VT
(13), FF (14), and CR (15). Like TTY ARROW.
NOARROW If you are at a non-display, tells the monitor to type out
characters below octal 40 as themselves instead of as uparrow
characters. Like TTY NO ARROW.
The options RUN, LOGRUN, INIT, PORNO, and COOKIE are mutually exclusive, since
they each tell LOGIN to transfer control to another program after the login. If
more than one appears in your OPTION.TXT, the one which is earliest in the above
sentence wins, e.g., RUN has highest precedence.
If there is a message addressed to you, LOGIN normally types
Message for YOU last written by PRG using PROGRM on dd-mon-yy at hhmm
Read it now?
where YOU is your programmer name, PRG is the programmer name of the last user
to write anything in your message file, PROGRM is the name of the program used
to do it, and dd-mon-yy and hhmm are the date and time it was done.
If you type Y, the message file is printed, and you are allowed to delete it
(the whole file). If you type N, the message file is not printed. You can also
type R, which will treat your mail file like a system message file; i.e., header
lines will not be typed, and, if you used a slash in the command, the only
messages typed will be those which came since you last logged in. However, R
may not find the recently received messages correctly if your mail file is in E
format. If you type R, LOGIN does not give you a chance to delete the file.
If you have the MESSAG option but not the NOMAIL option, then personal mail is
always typed out without asking first. If you have both MESSAG and NOMAIL, the
mail is typed but you are not given the chance to delete it. If you have NOMAIL
alone, you get the Message for YOU... line but not the mail itself; many people
use the NOMAIL option for LOGIN and run other programs to read their mail. See
the file E.ALS[UP,DOC] on the use of E as a good way to process your mail;
non-display users may prefer to use RCV -- see page 147.
If you have DIGEST and NOMAIL, you are notified of a new A.P. digest but it is
not typed out. (RCV will also do this for you.) It is also possible to get
automatic notification of incoming news stories on particular topics from the NS
program; LOGIN will tell you if there are any NS notifications for you
The LOGRUN program looks for a line in your OPTION.TXT file starting with
LOGRUN:. It then takes that line, and all following lines until a semicolon is
seen, and makes them be executed as if you typed them in. (The semicolon is
required.)
5.2 LOGOUT
The command for terminating a session on the computer is KJOB (kill job), which
runs the LOGOUT program. The command may be abbreviated K. It takes an
optional switch argument to select various optional features. The OPTION.TXT
file is also used to control logout options.
The LOGOUT program normally types out several lines of accounting information,
e.g., computer time used. If you are not logged in elsewhere, it deletes any
files in your directory with extension RPG, as well as any files of length zero
with extension TMP.
If the system downtime forecast file (\DOWN) has changed since LOGIN last showed
it to you (e.g., since you logged in), then LOGOUT will type the forecast as you
log out.
If you are telnetted to WAITS via a network, the LOGOUT program normally closes
your network connection after logging you out unless you specifically ask that
the connection be kept open with the OPEN option or the /O switch. However, if
you are logging out with the KATTACH or KLOG command, then your connection is
kept open in any case, since you are switching to another job.
This normal processing can be affected by switches in the command itself or by
options in the OPTION.TXT file. LOGOUT looks for a line in OPTION.TXT of the
form
LOGOUT:RPGSAV,ME,FAST,NODM,OPEN,HANGUP;
Of course, you need not use all of these options. The options, if found, have
the following effect:
RPGSAV Don't delete .RPG files, and save TMPCOR files on disk.
ME Type a friendly message (try it).
FAST Just log out, don't delete anything, don't save TMPCOR, don't print
statistics.
NODM Execute a TTY NO DM command if the job is running on an individual
display terminal, such as a Datamedia. This makes the system
forget about the display type, after possibly restoring certain
terminal modes (like Roll mode on a Datamedia). This option is
ignored for the KLOG and KATTACH commands.
OPEN Don't close the network connection if the user is telnetted to
WAITS from elsewhere.
HANGUP If you are connected to WAITS via a dialup phone line, then, with
this option, the system will automatically hang up on you when you
log out. The hangup will usually happen before all the type output
from LOGOUT has come out.
Switches are single letters preceded by a slash (e.g., KJOB/F). The switches
are:
/K Kill .RPG files (only necessary if you have the RPGSAV option).
/S Save .RPG files; save TMPCOR in .TMP files.
/M Type a message, like the ME option.
/F Fast logout, like the FAST option.
/Z Zero the disk. Deletes all your files, after asking if you really
mean it.
/N Execute a TTY NO DM command just like the NODM option above.
/D Don't execute a TTY NO DM command; this overrides any NODM option
present.
/O Keep the network connection open, if logging out while telnetted to
WAITS. If logging out while dialed up to WAITS, keep the phone
line connected, overriding any HANGUP option.
/C Close the network connection, if logging out while telnetted to
WAITS. This overrides any OPEN option.
If you have the RPGSAV option (see below), LOGOUT will look for TMPCOR files
(simulated files in core storage) used by SNAIL to remember COMPILE- and
EDIT-type commands, and save them on the disk. These TMPCOR files may exist for
different aliases you have used while logged in; all TMPCOR files with names CM
or ED, for any PPN, will be merged into files QSVCM.TMP and QSVED.TMP in your
login directory. If you also have the LOGIN:RPGSAV option, these disk files
will be copied back into TMPCOR when you next log in, so SNAIL will remember
your commands from one session to another. Note that the /F switch for fast
logout will prevent saving the TMPCOR files, and that fast login (LOGIN PRJ.PRG)
will not restore the disk files to TMPCOR. Please bear in mind that if you
often alias to different directories, and you use the RPGSAV option, you can
easily accumulate a lot of saved TMPCOR files that you may no longer need.
Since any job has a fixed quota of TMPCOR files, you may run out. To avoid
this, you should edit your QSVCM.TMP and QSVED.TMP files from time to time, to
eliminate unnecessary entries. (Then log out /F so that your edits will not be
overwritten by LOGOUT!)
Note that if you have the RPGSAV option for LOGIN but not for LOGOUT, you can
create the QSVCM.TMP and QSVED.TMP files explicitly (create them /N--no
directory--if you use E) to have a permanent set of remembered commands. Each
file must contain one line per alias, containing the PPN (without brackets), a
tab, and then the compile- or edit-type command.
Certain functions of LOGOUT are performed regardless of options or switches
used. You are told if you have another job logged in with the same PPN, and if
you have assigned any private devices (mag tape, etc.), you are reminded to
unload them. The "date last written" entry for your file directory is updated
to reflect your most recent logout (this information is used by FINGER). If you
are not logged in elsewhere, and you have a file named LOGOUT.MSG, it is typed
and deleted.
There are two other monitor commands which run the LOGOUT program, for logging
in with another PPN and for attaching to an existing job (see the ATTACH
command, Section 4.4.) They are
KLOG logout-switches ppn
KATTACH jobnum ppn logout-switches
The logout switches are as described above. The other arguments are in the
required form for the LOGIN and ATTACH commands.
Finally, there is a LOGOUT command, which is exactly the same as KJOB but no
arguments are allowed.
Any of these commands, when typed at a PTY which is not owned by a Telnet server
(that is, not the virtual terminal of a network user), simply kills the job
without running the LOGOUT program. This has approximately the effect of
KJOB/F.
5.3 SNAIL
The SNAIL commands run the SNAIL program, which then runs various other
programs. The commands are divided into three basic groups. The first, for
text file editing, take a file specifier as argument:
CREATE create a file with SOS
EDIT edit a file with SOS
MAKE create a file with TECO
TECO edit a file with TECO
The other major editor, E, includes the necessary code to carry out the SNAIL
functions itself, e.g., default extensions and remembering the commands. The
following commands are, therefore, not strictly SNAIL commands but function
equivalently:
CETV create a file with E
ETV edit a file with E
EREAD edit a file with E in read-only mode
READ edit a system documentation file with E
BOOK edit with E in book mode
The second group, for program compilation, take one or more program names or a
command string, along with various option switches:
COMPILE compile programs
LOAD compile and load programs
EXECUTE compile, load, and run programs
PREPARE compile and load with a debugger
DEBUG compile, load with a debugger, and start the debugger
TRY compile, load with a debugger, and start the program
PUB produce a document with the PUB document compiler
POX produce a document with the POX document compiler
TEX produce a document with the TEX document compiler
RER run a system program and give it a command string
RERUN run a user program and give it a command string
PROCESS pass a command string to the monitor
Finally, one more command, used in conjunction with the compile-type commands,
which takes no arguments:
CREF produce cross-reference listings from compilations
The complete description of the above SNAIL commands, with the command syntax
and the processing options provided, can be found in Appendix 1.
5.4 COPY and SPOOL
The next major group of commands runs the COPY program. Their arguments are
generally in the form "new-file ← old-file":
COPY copy a file
TRANSFER copy and delete the original
RENAME rename a file or change protection
The following COPY commands imply a destination, and take just one or more input
file specifications (separated by commas if more than one):
DELETE delete a file
TYPE copy to the terminal
XGPLIST copy to the Xerox Graphics Printer (XSPOOL is preferred)
DIRECTORYtype file directory
The COPY manual explains these commands fully, along with various options
specified in the argument list; see Appendix 2.
For printing files, there are several general purpose printers available to
system users. These include the line printer (on the SCORE system, actually),
the XGP, and the Dover (on the Ethernet). (As this manual goes to press, it is
expected that very soon there will be Canon printers available too.) To control
normal output to these printers, there is one phantom job assigned to each such
printer. These jobs are called spoolers, and making a printing request is
called spooling a file. Each spooler decides, on a priority basis, which file
will be printed next, the priority being based on the size of the spooled file
and how long it has been waiting. Spooling requests are recorded in temporary
disk files which are read and processed by the spoolers. The user makes,
deletes, or examines a spooling request with one of the commands shown below.
SPOOL request SCORE line printer listing of specified file(s)
XSPOOL request XGP listing of specified file(s)
DOVER request Dover printing of specified file(s)
UNSPOOL allow selective deletion of spooler requests
QSPOOL display spooler status and queues
The SPOOL commands also allow printing options to be specified in the argument
list; see Appendix 3 for details on the forms of the above commands.
The commands in this section all require that you be logged in, except for TYPE,
DIRECTORY, and QSPOOL.
5.5 MAIL
Several commands are provided for sending messages to other users. Messages can
be filed on disk, so that the addressee will be notified about them by LOGIN, or
they can be sent directly to the terminal of a logged-in user. There is also an
automatic reminder system which allows messages to be sent or programs to be run
at a later time. The commands used for these purposes are:
MAIL send a message to one or more message files
SEND send a message to the terminals of one or more users
GRIPE send a message complaining about a system problem
REMIND schedule a message to be sent at some later time
PLAN create a file describing how to find you when not logged in
EVENT send a message to all users about an event on a given date
BATCH schedule the execution of a command string at some later time
LATER schedule the execution of a given program at some later time
RETRY send any messages which were queued by earlier failing operations
NAME give a user's real name and tell if and where his mail is forwarded
ETV ∂ edit E-format message file
RCV edit non-E-format message file
CANCEL delete REMIND, BATCH, or LATER requests or queued mail
CKMAIL see if there are new messages for a user
The usual format of the MAIL and SEND commands is
MAIL user message
SEND user message
where user is a programmer name and message is the one-line text you want sent.
If you do not include a message in the command, the MAIL program will ask you to
type a message, which may then have more than one line. The complete
description of these commands is in Appendix 4.
The commands in this section require that you be logged in, except for MAIL,
SEND, GRIPE, NAME, RCV, and CKMAIL.
5.6 DART
DART is a program to save disk files on magnetic tape and restore them as
needed. It also handles mag tape positioning commands. The file dumping
commands take disk file names as arguments.
DUMP dump disk files onto tape
REAP mark file(s) to be P-dumped twice and then deleted
UNREAP remove the reap-mark from file(s)
RESTORE restore files from tape to disk
PUMPKIN ask the Great Pumpkin to restore your files later
UNPUMPKINallow selective deletion of PUMPKIN requests
PLIST list all PUMPKIN requests
LOCATE find which tape has dumped copy of files
TLIST list all files on a tape
TURKEY tell who last used a given DART tape
The tape positioning commands are:
REWIND
ADVANCE
BACKSPACE
EOT
The complete documentation of these commands is in Appendix 5 of this manual.
5.7 DO
The DO program allows automatic execution of an arbitrary sequence of commands.
By writing DO command files, you can make your own sequences of program
execution analogous to the SNAIL compiler-loader-execution sequence. The DO
command takes as arguments a filename and an optional function name or number in
parentheses. The default filename extension is .DO. The specified text in the
file is simply transferred into your terminal's input buffer, as if you had
typed it. Then the DO program exits, and the monitor processes the commands
that came from the file. A single file can contain any number of functions to
be selected by name or number, and in fact it is generally recommended that you
put all your DO functions into one file in order to save disk space.
The amount of text loaded from a DO command is limited by the capacity of your
terminal's input buffer (currently 95 characters, plus, on display terminals
only, one unactivated line editor line of about 160 characters). You can
sometimes circumvent this limitation by the following trick: if the command
string to be processed by DO ever leaves you at monitor command level, you can
insert at that point in the string a DO command to process another function; the
DO command must appear as the last thing in the string--subsequent commands
should then appear in the next DO function indicated. This trick can be
repeated any number of times--simply make the last command in each DO function
be a DO command to reference the next function. The DO program cannot be run by
detached jobs, since such jobs have no terminal for DO to simulate typing into.
DO does some conversion of certain characters in the file, to allow things like
CONTROL and META characters. The characters which are processed specially are:
RETURN ignored
LINE ignored
↔ translated to RETURN followed by LINE
↓ translated to LINE
≠ translated to ALT
λ translated to deferred CALL (one ↑C)
α adds CONTROL bit to the following character
VT adds CONTROL bit to the following character
β adds META bit to the following character
FORM adds META bit to the following character
⊗ translated to ESC
⊗- translated to BREAK
| separates different DO functions (see below)
≡ quote the next character (do not process it specially)
? takes the next character (other than RETURN or LINE or "\") as a
variable name. Suppose the character is A (i.e., ?A). If this is
the first occurrence of ?A in the file, DO types out "A= " and
waits for you to type in a text string ending with RETURN. This
string is substituted for every occurrence of ?A in the file.
?\ defines the next character as a special single escape character,
otherwise known as the brick character. That character can then
used to call various extended commands. See below.
Note that ESC and BREAK commands from a DO file are executed by the system
immediately while DO is running, rather than after DO exits, because these
commands do not go into the terminal's input buffer.
To allow more than one DO function to be stored in the same file (because small
files are inefficient in using disk space), the vertical bar ("|") character can
be used as a separator of functions. The command
DO DOFILE(GO)
will DO the commands that follow "|GO:" in the file, up to the next "|". You
can also call functions by number instead of name; for instance,
DO DOFILE(3)
will DO the commands that occur between the second and third "|" characters in
the file. In calling a function by either name or number, the right parenthesis
can be omitted. The case (upper or lower) of letters in a function name is
ignored, and almost anything reasonable can be used as a name. Essentially, it
cannot be a number (because you can't specify it), or empty, or contain a colon
or vertical bar. If you have more than one identically named function, the
first one is the one DO uses. You can specify a named function by number, but
in that case the name and colon become part of the function. (The extended
\FLUSH. command can be used in this case, if it's really a problem.)
The DO command remembers its argument in a TMPCOR file, so that you can type DO
without an argument to repeat the same command file. Also, the DO command is
remembered as if it were a COMPILE-type SNAIL command, so that the SNAIL exit
mode commands in the text editors will also repeat the DO command. Thus, users
of languages like LISP which are not recognized by SNAIL can write DO files to
run LISP and read in their programs.
If you give the command DO FILE with no explicit filename extension, then DO
will first look for FILE.DO, and if that doesn't exist, it will look for FILE.
To force DO to use the file with the blank extension, include a dot in the
filename, as in "DO FILE.".
The DO program ignores E directory pages, FORM characters found in E-format
files, and SOS line numbers.
Extended DO Features--the Brick Character
DO provides some additional text manipulation techniques beyond the basic one of
taking text from a DO file and putting it into your terminal's input buffer. To
use these extended DO features, you must specify a special escape character that
will appear in the DO file. Following the POX convention, we will call this
escape character the "brick". We will use the backslash character "\" as the
brick character in examples of the extended features. We will also use BNF
style angle brackets to enclose syntactic entities, for example, <char> will be
used to denote any character.
To specify a brick character use the sequence
?\<char>
This makes the <char> the brick character. For example, to specify backslash as
the brick character use
?\\
Note that each segment in a DO file must set the brick if it uses it.
The brick character appears as the first character of all the extended commands.
Subsequent characters are scanned to determine the command and to get any needed
arguments, etc. Then normal processing is resumed until the brick character is
encountered again.
If the extended command is denoted by a special keyword, the keyword is
delimited on the right by a dot character "." and may be in upper and/or lower
case letters.
The extended commands will be grouped below in terms of related functions.
Special Character Generation
The following commands are used to cause special characters to appear in the
terminal's input buffer. They are somewhat redundant, and mainly provide
alternates for the regular DO commands without using obscure characters
themselves. Most users will never need any of these, as the single-character
versions are used more often.
\CR. Return (same as ↔)
\LF. Line (same as ↓)
\ALT. Altmode (same as ≠)
\TAB. Tab
\VT. Vertical tab
\FF. Formfeed
\BS. Backspace
\C. Add CONTROL bit to following character (same as α or VT)
\M. Add META bit to following character (same as β or FORM)
\CM. Add both CONTROL and META bits to following character
\"<char> Quotes <char>, like ≡ except that this command will NOT quote a
vertical bar character!
\'<octal>Generate character with given <octal> value in WAITS ASCII
\=<decimal> Generate character with given <decimal> value (in rare cases the
user may need to delimit the numbers with \.)
\↑<char> Generate ASCII-control character (e.g., \↑G makes π)
\?<char> Generate SOS style character (e.g., \?G gets lower case g)
System Character Generation
\CALL. Generates a deferred call (same as λ)
\ESC. Preceeds an ESC or BREAK command (same as ⊗) Note: WAITS restricts
which escape commands are allowed. Also, they are done when
scanned and not passed on.
\CLEAR. Clears the input buffer (with a CLRBUF UUO).
Activation Table Manipulation
These commands alter your activation table with the SETACT UUO. This is mostly
useful for bypassing the line editor for programs (e.g., RAID) which use lots of
control characters which are also line editor commands.
\NOLINED.Suppresses the line editor (sets the ALLACT bit)
\LINED. Unsuppresses the line editor (clears the ALLACT bit)
\NOCONBLT. Suppresses control B, L and T only (sets the SUPCT bit)
\CONBLT. Unsuppresses control B, L and T only (clears the SUPCT bit)
Brick Character Manipulation
Actually, ?\<char> pushes the old brick on a stack. Hence, to pop the old brick
off the stack and make it the brick again, use:
\POPBRICK. Restore old brick by popping it back from stack.
Typing Out Text
To print one line of text without a carriage return, you can use the extended DO
command:
\PRINT.<char><string-sans-char><char>
This prints the included string.
This command cannot print RETURN or LINE, since these are removed from the input
earlier in the scan. To print a RETURN and LINE, use:
\NEWLINE.This prints a RETURN followed by an LINE.
To load the line editor, for example to set up the default response to a \INPUT.
command (see below), use the command:
\LOADED.<char><string-sans-char><char>
This loads the line editor with the included string.
To turn echoing off and back on, for instance to hide a password being passed to
DO, use this command:
\FLIPECHO. This alters the state of echoing, turning it off when on and vice
versa.
Macro Variable Commands
There is a set of 128 string variables, whose 128 names are all the 128 single
characters in the WAITS ASCII character set. In normal mode scanning, these are
set and called with the ?<char> command. The following commands allow a limited
amount of manipulation of these strings. The symbol <macro> will stand for the
character which is the name of the macro variable.
\←<macro><char><string-sans-char><char> Sets <macro> to delimited string
\INPUT.<macro> Reads <macro>'s definition from the
terminal
\&<macro1><macro2><macro3> Defines macro 1 to be the
concatenation of the current strings
of macros 2 and 3
\INSERT.<macro> Patches <macro> directly into the
output, unlike the ?<macro> command
which causes it to be rescanned
Output Control Commands
Output is placed in the input buffer by default. It can also be appended to a
macro. In addition, output characters may be "unsaid", that is, taken back.
The following commands provide these and some other related capabilities.
\PUSHOUT.<macro> Causes subsequent output to be appended to <macro>
\POPOUT. Returns to previous output destination
\UNSAY.<number> Causes the given (decimal) number of characters to be removed
from the end of the output destination, i.e., the output is
"backspaced". If more characters are "unsaid" than are
there, the result is a \FLUSH. See the examples.
\FLUSH. The destination is completely cleared, essentially like
"\UNSAY.∞",
\TELNET. If you are on a non-display, your terminal will be put into
"image mode" when all subsequent characters are being loaded
into the input buffer. This is useful if the input is to be
read by TELNET, which puts non-displays in image mode.
Miscellaneous Commands
Here are three special commands, including one for putting comments in your DO
file.
\;<char><string-sans-char><char>
Ignores the included text, allowing comments in the DO file
\. Does nothing--can be used to delimit numbers
\BEEP. Beeps your terminal
5.8 ZERO
The ZERO command is used to clear file directories on disk or DECtape. The
command takes a device name as argument; the device must be DSK, DTAn, or UDPn
(user disk pack). If you do not type the word ZERO in full, it will not accept
the device name on the command line, and will ask for it later. This is a
safety feature in case you mistype some other abbreviated command.
For DECtape, ZERO simply executes the UTPCLR UUO, which tells the monitor to
initialize the file directory for the DECtape unit you specified. Make sure you
don't get the wrong unit number and zero someone else's DECtape!
If you specify device DSK, you must confirm (by typing Y) that you want to
delete all the files in your disk area. ZERO then attempts to delete each file
in your area. For each file, it types # if successful, otherwise a message
indicating the reason for the failure (write protected, etc.). You cannot use
the ZERO DSK command if you are aliased.
The ZERO program is not used for new format (file structured) UDPs. It can be
used to change the password of an old format UDP, and also allows the
initialization on such a UDP of the file structure formerly used by the COPY
program, although this feature is now obsolete. The UFD command (see page 86)
is used to set passwords and create file directories on new format UDPs.
5.9 WHO
The WHO command (abbreviated W) runs the WHO program, which displays system
status information at your terminal. If you are at a display terminal, the
information is automatically updated as long as the program continues to run.
If you are at a non-display, the information is only typed once. The WHO
command does not require that you be logged in. WHO accepts various commands,
described later, to control what information is presented.
The first part of the WHO display is a list of the jobs on the system, with
various information about each job. This list is divided into two sections, for
jobs belonging to users and for system phantom jobs. (More precisely, the
second section contains jobs which are detached and have the JLOG bit off in the
job status word, i.e., are not logged in.) Jobs attached to pseudo-teletypes
are listed under the controlling job, with the line for the controlled job
indented. The listing for each job has several parts:
Job job number
Queue queue name, as in the wholine, with possibly an extra character
indicating one of several states (if more than one applies, the one
which comes first in this list is displayed):
← the job needs to be swapped in, e.g., for a monitor command
- the job is now actually running
⊗ the job is locked in core
→ the job's upper segment is next in line to swap in
↑ the job is next in line to be swapped out
↓ the job is next in line to be swapped in
* the job is swapped out
PPN the job's logged-in PPN ("100100" for not-logged-in WHOs, etc.)
TV the physical DD (if any) responsible for the job's line
Line the job's terminal line number, or DET for detached jobs
Jobnam the job name
Size the job's core image size in 512-word pages
Time the job's total run time since login
PL percentage of CPU time spent on this job recently
Seg job number of this job's upper segment
SWR number of ticks between startups of job's spacewar module
Alias the job's ALIAS PPN
After the job display comes a display for upper segments, containing the job
number (possibly followed by one of the above single-character markers), the
letter W if the segment is not write protected, the job name, core size, and
number of jobs using the segment.
The next part of the WHO display is a summary of overall system statistics.
This includes the time since the system was last restarted (Up Time); short and
long term time spent running the null job (Null Time); short and long term time
spent running the null job when another job wanted to be run but wasn't in core
(Wasted); the number of jobs waiting to access the disk (Disk Queue); total user
core image sizes in core and swapped out (Core); the total available user core
not used by locked-in jobs, and the total available user core (Usable); the
number of jobs in RUNQ and TQ and their combined core image size (Running Jobs).
The final section of the WHO display is a list of all I/O devices in use by
programs or assigned by jobs. For each such use of a device, a line is
displayed containing the logical name, if any; the physical name; the character
"#" if the device was assigned by the ASSIGN command; the job number using the
device; if a particular file is open, the file name, extension, and directory
ppn (for disk files), the number of records in the file, the record currently
being read or written, and the read/write status. This last will be W if the
file is open for output, R for input, or RA for read/alter mode, followed by E
if the end of file has been read. Note: if the file has been closed, there may
be no mode flag, and a large number like 577 in the current-record position.
Record numbers are displayed in decimal.
WHO commands
WHO accepts commands to determine what information is to be presented. These
are single-character commands, and should not be followed by carriage return.
However, some of the commands must be followed by an argument, which is ended
with carriage return; ending such an argument with alt mode will abort the
command. WHO commands may be included on the monitor command line which starts
the WHO program running, or can be typed separately while the program is running
(the latter on display terminals only). Only one WHO command which takes an
argument can be included on the monitor command line, and it must be the last
thing on the line.
On display terminals, only part of the information can fit on the screen at a
given time. Certain commands provide "scrolling" of the display up or down;
these commands are ignored on non-displays.
The available commands are listed in the table below. Other characters will be
ignored. If no command is typed to a WHO running on a display for two minutes,
WHO will exit, unless the ∞ command has been given. After WHO exits, typing
CONTINUE to the monitor will tell WHO to continue presenting the same
information it had been presenting when it exited.
The following commands apply only to display terminals:
↑ (or ;) scroll up 1/2 screen
↓ (or :) scroll down 1/2 screen
FORM (formfeed) scroll up whole screen
VT (vertical tab) scroll down whole screen
0-9 repeat argument for ↑ ; ↓ : FORM VT
∞ run for ten minutes instead of only two after the last given
command
H Hold the display; update the screen once and then stop updating it
(but don't exit yet). While you are holding, any command that
affects what is displayed will update the screen once, but holding
will remain in effect.
αH (CONTROL-H) Un-hold the display; resume updating it.
U Update screen. Used only for individual display terminals, for
which WHO normally rewrites only the information which has changed
since the last display. This command forces a complete redrawing
of the entire screen.
RETURN Exit normally, clearing the screen and redrawing the normal page
printer.
SPACE Same as RETURN--exit normally.
LINE Same as RETURN--exit normally.
E Exit but leave the latest text displayed on the screen, with the
page printer set up to avoid erasing the text
The following commands apply both to displays and to non-displays:
R only display jobs which have recently been Running (not in NULQ,
STOP, IOWQ, or INTW)
N restore Normal display (all jobs)
T Type out the job information only (not system statistics or file
information). On a display, exit after typing the information
once.
F Like T, but type File information also.
Q Type once only a Quick display of jobs which are not detached,
typing only their PPNs and TTY numbers.
D Devices--display only the Devices (e.g., files) open, not the jobs.
Also resets window back to top of text.
J Jobs--display Jobs (undoes D command) as well as devices. Also
resets window back to top of text.
B Big files--omit from the display any files that are not disk (or
UDP) files at least 16K in size. nB, where n is a digit, sets the
minimum size to n*16K, where n=0 is the default (only one digit is
allowed in n).
O Omit statistics (uptime, null time, etc.) from display.
I Include statistics (undoes O command).
M V * " + - & These seven commands allow you to specify which jobs should
be displayed. These are explained below.
WHO keeps two special tables of job specifications for deciding which jobs it
will display; these tables are called the PLUS table and the MINUS table. Jobs
specified by the MINUS table will not be displayed (regardless of other
conditions). The PLUS table is ignored if empty; but if it is non-empty, then
only jobs specified by the PLUS table are displayed; however, jobs specified by
both tables will NOT be displayed, since the MINUS table has priority. Both
tables are initially empty, and the R and N commands reset both tables to empty.
Jobs can be specified in these tables by project name, programmer name,
project-programmer name, job number, or job name. Each of the commands
* + - " & takes an argument which should be ended with a carriage return; if an
argument is ended with an altmode, the command will be aborted. WHO will beep
you if an argument is not accepted (illegal argument or aborted with altmode).
The commands M and V take no argument. The argument to & is a filename, the
argument to " is a job name, and the argument to each of the commands * + - is a
job specification which can be any of the following forms:
PRG programmer name (letters and digits only)
,PRG programmer name (letters and digits only)
PRJ, project name (letters and digits only)
PRJ,PRG project-programmer name (letters & digits only)
NUMBER a decimal job number (digits only)
"NAME a job name (any sixbit characters after ")
A job will match specifications of the first four types if either its logged-in
PPN or its ALIAS PPN matches the specification. Any job running on a PTY owned
by a job being displayed will also be displayed, unless the job on the PTY
matches a specification in the MINUS table. If a job running on a PTY is
displayed and its controlling job is not displayed, then the job on the PTY will
be indented using dots (.) instead of spaces (which would be used if the
controlling job were being displayed).
The seven individual commands are described below.
M only display jobs matching your logged-in programmer name or your
ALIAS programmer name (clears both tables and then puts your
logged-in programmer name and your ALIAS programmer name into PLUS
table)
V only display jobs belonging to volleyball players (simulates an
&VB.DIS[P,DOC]--see "&" below)
*<spec> only display jobs matching the specification <spec> (clears both
tables and then puts <spec> into PLUS table)
+<spec> also display jobs matching <spec> except those matching entries in
MINUS table (adds <spec> to PLUS table and removes <spec> from
MINUS table); leaves running-jobs-only mode.
-<spec> don't display jobs matching <spec> (adds <spec> to MINUS table and
removes it from PLUS table)
"<name> only display jobs with the job name <name> (clears both tables and
then puts <name> into PLUS table)
&<file> clear PLUS and MINUS tables and then put job specifications from
the file <file> into the tables. E directory pages and SOS line
numbers are permitted and ignored. The default extension .DIS is
used if no extension is typed. If no PPN is typed, the disk area
[P,DOC] is tried first, then your own disk area, to find the file.
While reading from a file, spaces are ignored (except in a job name). A
semicolon not in a job name causes the rest of the line to be ignored.
Non-SIXBIT characters (except lower-case letters, which are converted to upper
case) are treated like CRLFs.
An entry in the file can be any of the forms listed below, and should be
terminated by a comma or a CRLF. Note however that a comma (or any other sixbit
character including semicolon and space) appearing as one of the first 6
characters of a job name will be taken as part of the job name.
+<specx> Add the specification <specx> to PLUS table.
<specx> Add the specification <specx> to PLUS table.
-<specx> Add the specification <specx> to MINUS table.
Unless all entries in the file are of the form -<specx>, WHO leaves
running-jobs-only (R) mode. A job specification in a file, <specx>, can be any
of the following forms (note that these are slightly different from the forms
for <spec> that you can type in):
PRG programmer name
[PRG] programmer name
[,PRG] programmer name
[PRJ,] project name
[PRJ,PRG]project-programmer name
"NAME job name. After the " the first 6 characters (or less if
terminated by a CRLF) are taken as a job name. Then characters are
skipped until a comma or CRLF is seen.
Note that you cannot specify a job number from a file.
If WHO is started with the REENTER command, it makes a listing of its
information display on device LPT. Since there is no LPT (line printer) on
SU-AI, you should assign some other device, e.g., DSK, as LPT (A DSK LPT) before
using REENTER. The information sent to LPT will be controlled by the WHO
commands in effect when WHO last exited, if any.
As special features, you can use the WHO command to run a few other programs.
First, the command WHO A runs SYS:IMPSTA to show network status. Secondly,
WHO L runs SYS:DLNSTA to show DialNet status.
Finally, the command WHO user%host (user is optional) types once only a WHO-like
status report on the specified user, or all users if none specified, at the
given network host. The exact format of the report depends on the host
selected. For incompatibility, this network command can use an "@" instead of
an "%". In that case, however, if the "user" is omitted, then WHO will first
interpret what follows the "@" as a filename, and if there is no such file, then
WHO will assume that it is a host name instead.
5.10 FIND
FIND is a system command that causes a search for a specified key in a specified
file. The FIND command has the following syntax:
FIND[ WITHIN <delim>][ SURROUND <num>] <key>
[ OMIT[TING][ ONLY] <omits>] [ IN <file>][ WRITING <file>]
where [] indicates optional elements. There are also DFIND and OFIND commands
with the same syntax (except for the command name). <key> is the string of
characters to be found in the file <file>, <omits> are characters to be ignored
in the file, <num> is the max number of lines to print on either side of a
"hit", and <delim> is either a single character or one of the following words:
MSG LINE PAGE PARAGRAPH GRAF.
Now for some details.
File to Be Searched
The default file to be searched is the phone directory. If you use the DFIND
command, the default is the unabridged dictionary word list. You can specify
your own default via the OFIND command (see below).
To specify a file to be searched other than the default, use the IN <file>
clause. Certain special names are recognised in this clause: PHONE gets you the
phone directory (without having to type its full name), DICT gets you the
dictionary, FORWARD gets you the file of mail-forwarding entries, and ∂ (partial
sign) gets you your mail file. You can optionally follow the ∂ with (1) a
programmer name to specify a mail file other than your own, or an asterisk (*)
to specify the system message mail file NOTICE.TXT, and/or (2) an extension to
specify one other than .MSG (or .TXT), and/or (3) a PPN to specify one other
than [2,2]. You can specify a device other than DSK, using the usual syntax.
What Gets Printed
When a match is found, the "unit" of the file that includes the last character
of the key is printed, where the "unit" is determined by the <delim>. The
default unit is the PARAGRAPH except for the DFIND command, for which the
default is the LINE. If the partial-sign (mail) filename specifier is used, the
default unit is MSG, and if the FORWARD filename is used, the default unit is
LINE. You can override these defaults using OFIND or the WITHIN clause (see
syntax above). The delimiter <delim> can be specified as a single character or
it can be specified by one of the following exact names:
MSG LINE PAGE PARAGRAPH GRAF
where MSG means that partial sign (∂) is the delimiter (designed for use with
mail files), LINE means that the end of a line is the delimiter (i.e., only the
line on which the key ends will be typed), PAGE means that formfeed (a pagemark)
is the delimiter, and PARAGRAPH or GRAF means that a blank line or pagemark is
the delimiter.
The delimiter character will be treated as a delimiter only if it occurs as the
first character on a line; a line starting with the delimiter character is
considered the first line in a new text unit, and the previous line is the last
line in the previous text unit. Text units may span page boundaries (except for
PAGE, PARAGRAPH, or GRAF); the pagemarks are not printed.
Within a single delimited text unit, up to 25 lines can occur both before and
after the line in which the key is found. If more than 25 lines occur before
and/or after the key but within the delimited text area, an ellipsis (. . .)
will be typed out before the first line typed out and/or after the last line
typed out. Further occurrences of the key within the same text unit will not be
detected unless the 25-line limit is exceeded and the key occurs entirely after
the last line typed. Normally (i.e., if the text unit ends within 25 lines
after the key) the search picks up starting with the CRLF (carriage return line
feed) ending the last line printed; thus the CRLF can be used as part of the key
to search for occurrences only at the beginnings of lines (in fact, FIND
pretends there's a CRLF at the very front of the file, so that finding hits at
the front of the first line works as expected). The 25-line limit can be
extended or truncated using the SURROUND clause in the command line.
Each separate text unit containing the key is a "hit" and is typed out, with
each line of text preceded by an asterisk (*) except that the line in which the
key occurs is preceded by a greater-than sign (>). Also, the hits are counted
and the count is printed after the whole file has been searched. (Multiple hits
within a single text unit may occur; see preceding paragraph.) In the printout
the hits are separated by blank lines. EXCEPTION: If the <delim> is LINE, then
no blank lines are inserted and the "*" and ">" prefixes are omitted.
What Gets Searched For
Here's where things get interesting. Within the <key>, certain characters have
special interpretations, as listed below:
comma Separates two strings to be searched for simultaneously; that is,
FIND FOO,BAR,BAZ will search for FOO, BAR, and BAZ. Simultaneous
searches like this take no more (or less) time than searching for
a single string.
letter Matches either upper- or lower-case in the file.
'xxx Character with ascii code xxx (octal); e.g., '044=$. E.g.,
FIND q'015 will look for lines ending with "{ }q"{ } (or "{ }Q"{
}).
{xyz} Any of the characters xyz; any number of characters may be given
between the braces, and they may include any of the constructs
listed here except comma, infinity, or another `embraced' string.
For instance, FIND ≡M{s¬∃≡,} searches for an upper-case M followed
by either a lower-case s or an upper-case S or a CR, LF, tab,
space, formfeed, or comma (see below regarding "{ }≡"{ }, "{ }¬"{
}, "{ }∃"{ }).
∀ Any character.
∃ Any character except CR, LF, tab, space, or formfeed.
¬x Any character except x (x can be a multi-character construct such
as {xyz} or ∃).
| Equivalent to ¬∃, i.e., any of: CR, LF, tab, space, FF.
≡x The character x (used to quote these special characters; can also
be used to quote a letter to enforce either upper- or lower-case).
∞x Any number (including zero) of repetitions of x (x can be a
multi-character construct; see examples below).
space Equivalent to ∞|, i.e., zero or more spaces, tabs, CRLFs, and
formfeeds; to match precisely one space, quote the space with `≡'.
Note: The time taken by the search is independent of the complexity of the key,
although extremely complex keys may take a few seconds to initialize the search.
(This does not consider the time taken to print the hits.) For example,
searching for any key in the dictionary (about 2.9 million characters of text)
takes about 6.5 seconds of Ebox time.
Putting The Results in a File
If you include a WRITING clause in your command, then the only thing printed on
your terminal will be the number of hits, after the entire file has been
searched. The actual hits (if any) will be written in the specified file. If
you specify WRITING NOTHING, then the hits will be completely discarded, but you
will still be told how many there were. Like the file being searched, the
WRITING file can be on a device other than DSK.
The OMIT Clause
The OMIT (or OMITTING) clause in the syntax above lets you specify certain
characters to be ignored during the search. The default is '012'000, i.e.,
ignore linefeeds and nulls. (Thus carriage returns may be used as
single-character delimiters around lines.) If you include an OMIT clause in
either your command line or your OFIND option line (see below), the characters
specified are omitted IN ADDITION TO the default characters, UNLESS you specify
"OMIT ONLY". Thus OMITTING '014 omits linefeeds, nulls, and formfeeds, while
OMITTING ONLY '014 omits only formfeeds. The <omits> string takes precedence
over the <key>; i.e., FIND XYZ OMITTING Y is guaranteed to find zero hits.
The <omits> string may include any of the special constructs listed above for
the <key>, except for the "∞" and "space" constructs.
The OFIND Command
If you use OFIND (currently abbreviatable to OF) instead of FIND in the syntax
above, it is exactly like FIND except that the OPTION.TXT file on your login
area is scanned for a line beginning "FIND:" (case of letters is ignored) and,
if found, the line is used to override various defaults. The format for the
line is:
FIND:[ WITHIN <delim>][ OMIT[TING] <omits>][ IN <file>][;]
Any fields not specified in OPTION.TXT retain their usual defaults as defined in
the preceding sections. As a special case for compatibility with an earlier
version of FIND, the line may read:
FIND:<file>[;]
to specify a default file without affecting the <delim> and <omits>. If you
have more than one file you like to search a lot, you can set up multiple
OPTION.TXT lines of the form:
FIND/<ident>: etc.
and the command OFIND/<ident> etc. will use the specified option line. OFIND
with no /<ident> will use the first FIND option line it comes to.
Examples
Here are some examples of using the various forms of the FIND command.
FIND [LES:
will print out the entry for LES in the phone directory. (The "[" and ":" keep
it from finding arbitrary words that happen to contain the string "les", since
in the directory the programmer name field is surrounded by those characters.)
FIND garply baz in ∂
will search your own mail file for "garply baz" and type out the entire
message(s) it occurs in.
FIND ≡ ME in ∂*
or FIND '011ME in ∂*
(that's ≡<tab>ME in the first one) will find all system messages (in
NOTICE.TXT[2,2]) from ME.
FIND president in ∂.nap
will search your News Service notification file on [2,2] for all notifications
containing "president".
FIND RUN IN IN IN
will search for "RUN" (ignoring case) in a file with the unlikely name "IN IN".
The ≡ construct can be used to override this, as in
FIND RUN≡ IN IN IN
which searches for the phrase RUN IN in the file named "IN", since the quoted
space prevents the first "IN" from being taken as a filename lead-in.
DFIND k∞{aeiou}k WRITING kk
will search for all words in the dictionary containing two k's (upper- or
lower-case) with nothing but vowels between them, and will put those words into
a newly-written file called KK on your area.
DFIND |≡a∃∃∞∃{pt}¬{aeiou|}
will search for all words beginning with (due to the initial "|", which matches
only a CR, LF, tab, space, or formfeed) a lower-case `a', followed by two or
more non-delimiting characters, followed by either a `p' or a `t', and then any
non-delimiter other than a vowel.
More example commands:
FIND MCCARTHY
FIND TARGET BYTE in COMLIN.FAI
FIND LOMA VERDE
FIND EVENT IN ∂*
FIND ≡ E≡ IN ∂*
FIND WITHIN MSG PDP-11 IN OUTGO.MSG
FIND WITHIN PAGE UDPUFD IN MONCOM.BH[S,DOC
DFIND weird,wierd
FIND john∞∀lathrop
Example output for the last example command:
*McCarthy, John (Prof. John) - Professor [JMC: FR] 1700 200
* MJ356; 7-4430 Sep 4
> 846 Lathrop Dr. ⊗ Stanford, CA 94305, 857-0672
1 hit on key "john∞∀lathrop".
Using DFIND From E
The E editor has an extended command ⊗X DFIND that interfaces with the FIND
program. (Note that the ⊗X FIND command in E is something else entirely!) E's
DFIND command starts up a phantom job to do the search, and a summary of the
results are sent to your terminal. The summary includes the number of hits, as
well as the first, last, and (if different) shortest "hit" lines.
The syntax of the DFIND command in E is the same as that of the monitor command,
with the same defaults for the WITHIN, OMIT, and IN clauses. If you use
"DFIND/<ident>", the defaults are overridden using your OPTION.TXT, as if you
had invoked OFIND. (This is not permitted with the monitor command.) If you
specify a WITHIN other than the default of WITHIN LINE, then the text units
containing the first three hits (instead of the first, last, and shortest) will
be sent to you; this will probably overflow the page printer at the bottom of
E's window, so you'll have to use BREAK N to see the whole text. Only 3 lines
on either side of each hit are included (instead of the usual 25), though you
can as usual override this with the SURROUND clause.
If you want to see more than just the summary of hits, you can use the WRITING
clause to send all the hits to a file. If you just want to see how many hits
there are, without even the summary, say WRITING NOTHING.
If you don't give anything on the DFIND command line in E (i.e., if you just
type ⊗X DFIND<cr>), the current line of text (or the first line of attached
text, if any) will be used to specify the search parameters.
Final Notes
If you type just FIND (or DFIND or OFIND) without providing a <key>, you'll get
a summary of the command syntax and special <key> constructs.
The special sequences currently recognised within the <key> string allow
specification of a subset of regular expressions. The main loop of the FIND
program could just as easily handle any regular expression without slowing down
any, but FIND's author (Don Woods) doesn't "feel like writing a parser for the
darn things." If someone wants to provide a SAIL program that converts regular
expressions into a transition table for a finite state machine, he'll consider
building it into FIND.
EFIND
The EFIND command runs the EFIND program, which is similar to FIND in purpose,
but works only on E-formatted files (i.e., files prepared with the editor E) in
which the entries are sorted and are WITHIN PAGE. If your file meets these
format restrictions, it runs faster than FIND. The program is documented in the
file EFIND.RSP[UP,DOC].
5.11 Other System Information Programs
This section describes other commands which run information programs. All of
them except DSKSIZ are allowed to be run without logging in.
The WHERE command types out information similar to WHO for jobs belonging to a
particular user. It takes a PPN or programmer name as argument, and for each
job whose login PPN matches the argument types out the job number, PPN, job
name, core size, queue, total run time, idle time (real time since last run),
terminal, and alias if any. If the job is logged in over the a network, the
host from which the connection was made is also shown. (The terminal is listed
by type and unit number, e.g., DM-1, TTY-36, III-60, DD-66, PTY-161. Note that
these are not actual physical device names recognized by the system, except for
TTYn.) If no argument is given, all jobs will be listed.
If you are logged in and run WHERE, you can give the REENTER command and type in
a job name. WHERE will then list all jobs with that job name.
If WHERE doesn't find the specified user logged in, then it will swap to the
WHEN program (see below), which will report when the given user last logged out.
This does not apply to the job name feature of WHERE.
The WHEN command tells you the time of last logout for one or more users, and
whether or not they are now logged in. Arguments can be programmer names or
PPNs (without brackets), and are separated by semicolons. For example,
WHEN DON;S,SYS;*,JMC will report on the last logout for any of DON's PPNs, for
the specific PPN [S,SYS], and for each of JMC's PPNs separately.
The FINGER command also lists jobs belonging to a particular programmer, but
provides different information: the job number and job name, the programmer
name, the real name of that programmer if known to the system, the number of
minutes since the job was last run (followed by a dot if the job is stopped),
the terminal number (and type, as in WHERE), and the actual location of the
terminal (room number, if in the lab, and whose office it is). Unlike WHERE,
for a Data Disc terminal FINGER shows the number of the physical terminal
responsible for the line, not the TTY line number. The number will be shown in
the form TV-n if the physical terminal screen is looking at the line belonging
to that job, or as tv-n (lower case letters) if not. In other words, if the
same physical terminal is responsible for more than one line, only the one which
it's watching at the moment will be in upper case. If another number is shown,
following the idle time, it is the number of additional Data Disc channels used
by the job.
If more than one physical terminal is tied to the same Data Disc line, FINGER
will show all of them; the normal output for the job controlled by that line
will be followed by one or more lines containing only the terminal information
(no job name, number, etc.); if the line is hidden, and someone has tied to it
by overriding the hiding, then the line typed for physical terminals other than
the responsible one will say *** SPY *** SPY *** SPY ***.
FINGER with no arguments displays all jobs which are logged in. If any
programmer specified in the argument to FINGER is not logged in, the program
types the date and time of his last logout. Also, if he has created a plan file
(with the PLAN command, Appendix 4), it is typed. Typing -LOGOUT or -PLAN
(abbreviated -L or -P) will eliminate the logout time or the plan file. FINGER
will accept human being names as arguments instead of programmer names, if
desired.
If more than one name is given as argument (separated by spaces or commas),
FINGER will report on all the selected users. An argument of the form &file
will look for names in the specified file, with default extension null or .DIS
and PPN your own or [P,DOC]; FINGER &VB will look for VB[your alias],
VB.DIS[your alias], and VB.DIS[P,DOC] in that order.
If the argument to FINGER is of the form user@host or user%host, then FINGER
will show similar information about the specified user (or all logged-in users
if none is given) at the specified network host. Not all hosts support this
FINGER protocol. The form @* will show the FINGER display for all cooperating
hosts.
The HELP command provides information about system programs and facilities. It
takes as its argument the name of some program or concept, and provides some
short description of that facility, if such a description exists. The data for
HELP comes from the [3,2] directory; this data consists mostly of short text
files which are typed by HELP, but may also include programs or monitor commands
which HELP will run for you. If no HELP is available, but there is a longer
document available in one of the standard documentation file directories, HELP
will so inform you. If you type HELP with no argument, the program will list
the topics on which HELP is available. (Some of the HELPers which run programs
rather than just typing text at you require that you be logged in. HELP LOGIN
is cleverly not among those.)
The DSKSIZ command reports how much disk space someone is using and what his
disk allocation is. The command takes a programmer name as argument; no
argument means your login programmer name. The programmer name may optionally
be preceded by a device name, such as UDP1, to see the user's total usage on
that device. The program types the user's allocation and the total amount of
space taken up in each of his directories, plus the size of files of his on the
area [2,2] (e.g., message, plan, and NS notification files). Finally, it tells
whether the user is under or over allocation and by how much.
The switch /F (Fast) will suppress most of the typeout but give you the relevant
totals. The /V switch (Verbose mode) will start by asking if you would like to
record the information provided in a disk file PURGE.DAT for later reference,
and if the user is over quota, offers to write in a file named PURDAT a list of
the files the purger would choose to purge. The switch /A (All) will force
DSKSIZ to list all of the user's files in the file PURDAT, in the order in which
they would be purged right now, with an indication of which files are currently
safe from the purger.
Each line of DSKSIZ typeout is in the following format:
[PRJ,PRG] n Files. b Blk. w DW. p% Date
This means that directory PRJ,PRG has n files occupying b disk blocks and w disk
words (each block is 2334. words) with a storage efficiency of p%. Date is the
date of the most recently written file in the area.
The SYSTAT command runs the WHO program (see Section 5.9). The old SYSTAT
program is no longer supported on this system, but the command name was retained
for compatibility with other systems.
5.12 Miscellaneous System Programs
The commands in this section run miscellaneous system programs. Except as noted
below, they require that you be logged in.
The LISP command runs the MACLSP interpreter. It takes no arguments.
Several commands run programs that communicate with other hosts through a
network. These commands, which are discussed in detail in Appendix 6, include:
TELNET or TN Opens normal Telnet connection to foreign host.
SUPDUP or SD Opens display Telnet connection to ITS or WAITS host.
DTN Opens normal Telnet connection with Datamedia simulator program.
OTN Opens "old" protocol Telnet connection.
FTP Opens File Transfer Protocol connection to foreign host.
HOST Reports host names or numbers and related information.
It is possible to establish Telnet-like connections to remote computers by using
dial-up connections via the dataphones normally used for incoming dial-up lines.
The dataphone on TTY37 includes an automatic dialing circuit. The DIAL command
will establish an outgoing dataphone connection and thereafter behave like a
Telnet. In particular, this means that you can give to DIAL virtually the same
commands that you can give to Telnet; these commands are explained on page 160.
The DIAL command itself takes as its argument either the name of the phone
number you want or the telephone number itself, in the form
(ddd)ddd-dddd
where d represents a digit, the parentheses and hyphen are optional, and the
area code can be omitted if it is 415. Certain commonly used phone numbers have
names that DIAL will recognize in place of the phone number, such as LOTS and
CCRMA; if you want to call some well known place, try DIALing its most common
name(s). To specify the speed (baud rate) of the phone connection, you can add
one of the switches /110, /150, or /300 (abbreviated /1, /5, or /3), e.g.,
DIAL/1 CCRMA. The default is 300 baud. (You can also give a command of the
form DIAL TTYn, which lets you communicate with TTYn as if via Telnet. This
form would be useful if TTYn had a phone that you could dial, but our terminal
phone lines generally can't be manually dialed out on, so this isn't very
useful. The other use of this form occurs if the other end of the TTY has a
computer connected directly; this is occasionally done temporarily in order to
let WAITS talk to the given computer and vice versa.)
The NS command runs the News Service program, which allows access to news
stories which have been received from the Associated Press and New York Times
news wires. The HOT command runs the HOT program, which types AP and NYT
stories as they come in. These commands are restricted to local users at the
request of the Associated Press. Full documentation on the news service is
contained in the file NS.ME[S,DOC].
The UFD command and the UDPUFD command run the UFD program, which is used to
create, delete, or modify user file directories on the system disk or on
file-structured user disk packs. The difference between the two commands is
that UFD has default device DSK, whereas UDPUFD will use whichever UDP is
available to your job, if unique. The command format is UFD DEV:PRJ,PRG. To
create a new directory, you must know the pack (UDP) or master (DSK) password;
to change or delete a directory you must know its password. However, you can
create a new directory on the system disk with the same programmer name you are
logged in under; this is the normal way for users to create additional
directories for themselves. You can change the given directory's password or
file protection codes with UFD as you can (for the main file disk only) with
LOGIN (see Section 5.1). You can delete a directory only if it is empty.
The UNPROTECT command allows any logged-in user to change the protection of any
file on the disk to 005, which allows any logged-in user access to the file.
The use of the command is logged on the console terminal and in the file
UNPROT.LOG[1,2], which is otherwise not writeable and cannot itself be
unprotected. The command is intended as a last-resort emergency technique for
legitimate access to protected files, and its misuse is a serious offense. User
file directories cannot be unprotected, and a protected directory will prevent
access to any of the files in it. The argument to the command is the file to be
unprotected.
The ACCESS command is used to gain access to any protected disk directory for
which you know the password. ACCESS takes its arguments exactly as the ALIAS
command does (e.g., ACCESS 1,SYS -- see ALIAS on page 53), but with ACCESS you
must give the directory's password and for that you get ownership rights to the
directory's files.
Unlike ALIAS, however, ACCESS runs a program in your core image.
ACCESS works by ALIAS'ing you and granting you a special privilege called the
AAO (Access Alias as Owner) privilege. If you reference any file on your alias
PPN when you have AAO, you are given full ownership access to it. If you change
your alias PPN with the ALIAS command or the DSKPPN UUO, you lose your AAO
privilege; otherwise, you keep it until you log out.
In addition, the ACCESS command with no argument gets you your normally entitled
privileges (after you have typed your password). This is useful if you have a
remote-only password set up and have logged in locally without giving a
password; in that case, you won't have gotten any privileges that you are
entitled to (except for the Local User Privilege).
The UNDELETE command can be used to try to recover a file which has been deleted
accidentally. The format is UNDELETE newfile←oldfile where oldfile is the one
which was deleted and newfile is the name under which the recovered version will
be written. The file can be recovered only if the disk space it occupied has
not yet been reassigned to another file, so if you accidentally delete a file
you should try this right away. A file which can't be recovered this way may be
recoverable from the backup tapes which are made daily, using the DART program
(Appendix 5).
The @ command runs the @ (ATSIGN) program, which can be used to produce
cross-reference program listings for XGP or Dover output. It also allows for
incremental listings when a program is modified. The documentation for @ is in
the file ATSIGN.RMS[UP,DOC].
The FRAID command runs the system program FRAID, which is a version of the RAID
debugger (documented online in the file RAID.PMP[S,DOC]) for looking at and/or
modifying binary disk files (instead of core images, which normal RAID handles).
To run FRAID, give the monitor command:
FRAID <filename><optional switches>
where the <optional switches> can include any of the following:
/D means the file is a DMP-format file (this is the default)
/N means the file is not a DMP file
/R means open the file only for Reading (this is the default)
/W means open the file for Writing
With the (default) /D switch, the extension .DMP is assumed. With DMP files,
locations 0 through 73 cannot be viewed since they are not stored in the DMP
file. If FRAID is run in /W (write-enabled) mode, all changes made in the core
version of the file are immediately written onto the disk. If any error occurs
in parsing the command line or in opening the file, then FRAID reverts to asking
explicit questions about the modes and filename. FRAID does not allow a device
to be specified for the file. To FRAID a file on a UDP, you must assign the UDP
as DSK.
The PROVE command runs the PROVE program, a Pascal verifier.
The VERIFY command runs the VERIFY program, another Pascal verifier.
The FIXIMLAC command is used to initialize IMLAC terminals. (These are
terminals which are treated as Datamedias by the monitor, but are actually small
computers with display screens.) With any luck, you will never see an IMLAC.
This command may be given when not logged in (it should be given from the IMLAC
itself, to reload it). READ IMLAC for details.
The DECIDE command can be used to help make difficult programming decisions.
For example:
DECIDE SHOULD I GO TO LOUIE'S FOR DINNER TONIGHT?
The TEST command runs the system program TEST, if any, which is used for testing
new system features and programs.
6 PRIVILEGED COMMANDS
Certain command functions can only be used by privileged users. (There are
several privileges which may be associated with a PPN.) Most privileged
functions are carried out by programs and are documented with those programs,
but a few monitor commands themselves take on special meanings when used in a
privileged way. Most users do not require any privileges; if you think you need
to be assigned any, see a system programmer, who will disagree.
The DETACH command, if given with a device name argument by a user with the DEV
privilege, makes the specified device unavailable to users. This is intended to
be used for hardware maintenance. The ATTACH command with device name argument,
also privileged, assigns a detached device to the job giving the command; it
becomes generally available when the job deassigns it. The DETACH command also
accept pseudo-device names of the form DDn or DDn! ; the former marks Data Disc
channel n as not a preferable channel, and the latter (with the !) makes that
channel completely unavailable (really detached). ATTACH DDn undoes both kinds
of DD detaching.
The DEV privilege or being on the console terminal (CTY) also allows: (1) the
TTY command to be directed to any terminal, even if in use by another job;
(2) the TTY SPEED command for any scanner line, provided still that the line can
physically run at the given speed; and (3) the TTY ENABLE nnn command to enable
use of keyboard nnn when the system is otherwise down for maintenance.
A user with the ATT privilege can use the ATTACH command to attach a phantom job
(i.e., a detached job with the JLOG bit off in its job status word). In this
case, ATTACH will log the job in by turning on its JLOG bit.
A few privileges are available to any user, but must be specifically enabled by
giving the ENABLE command with the privilege name as argument. These privileges
are UPG, LIV, DET and LUP. These privileges, and any other privileges a user
may have, can be disabled by the DISABLE command, also with the privilege name
as argument. The command DISABLE ALL disables all your privileges except for
LIV and LUP.
The UPG privilege must be enabled before giving a FLUSH command for a terminal
which is in use. (See page 51 for the use of this command.) The FLUSH command
disables the privilege, so you must enable it every time you use it.
The LIV privilege prevents automatic logout, which normally happens when a job
has been idle for a certain length of time (varying with the time of day, see
page 5). If you have a core image that you need to keep logged in while you
poke at it, then the LIV privilege will preserve it. With the LIV privilege
enabled, an idle job on a Data Disc or dialup line that is needed because of a
shortage will merely be detached, thus freeing up the line but keeping the job
logged in. The LIV privilege goes away when you run (or GET) a new program,
since LIV applies only to a given core image.
On the other hand, the DET privilege, which stays on until turned off
explicitly, can be used regularly to turn autologout into autodetach provided
there is no job shortage in the system. With DET, a job that would otherwise be
killed in order to free up a DD channel or dialup line will normally just be
detached. However, if there is a job shortage or if the job has been idle for
over two hours, then it will be killed even with DET enabled. The login option
DETACH can be used to have DET enabled automatically when you log in (see
Section 5.1).
The LUP privilege means logged-in user; it is set for all users on login, and
distinguishes logged-in (and therefore authorized) users from guests who use the
commands allowed without login. Various programs restrict the capabilities
available to not-logged-it users, who cannot write most files. The privilege
can be disabled primarily for the benefit of people debugging system programs
which must distinguish logged-in from not-logged-in users. Once disabled, LUP
can be re-enabled only if you are at a DD or III terminal or if you give the
ACCESS command without an argument (getting your privileges by giving your
password).
Also, a few system programs intended for general use require special privileges.
Such programs are run by special commands (not R or RUN), and any attempt to
modify your core image while running such a program will disable the temporary
privileges involved.
The EDDT command can be given only from the P1 console terminal. It stops
timesharing and starts Executive DDT to allow debugging of the monitor.
The BEEP command also can only be given from the console terminal. It beeps all
terminals on the system and is used to signal the restoration of service after a
system pause.
The P2LOAD command can be given only from the P1 console terminal. It reloads
P2 (the secondary processor, which is currently a KA-10 used mainly to run the
XGP and the VRN). Without any argument, this command reloads the normal P2
system, but the command can be followed by a semicolon (";") and a filename
and/or switches to take other special actions, such as marking P2 memory as up
or down. For details, see a wizard.
The 11LOAD command can be given either from the P1 console or from a job with
the DEV privilege. This command reloads the console PDP-11, which connects
SU-AI to the Ethernet as well as controlling the console terminal. Again,
without any argument, this command reloads the normal program into the PDP-11,
but the command can be followed by a semicolon and a special 11LOAD subcommand
to make it do something out of the ordinary. For details, see a wizard.
The TTY EXIST nnn command turns on the scanner port for the given TTY(s)
(numbers separated by commas) and resets their speeds to the defaults.
TTY NO EXIST nnn turns off the given TTYs' ports. With no arguments, these
commands can be used to see a list of TTYs whose ports are on or off. This
command is not actually privileged, although it is intended primarily for use by
wizards.
The BROADCAST command, given from the P1 console terminal or from a job with the
DEV privilege, causes the system to enable reception of Ethernet broadcast
packets. This can cause the system to bog down substantially when lots of
broadcast packets are being sent. To disable reception of this packets, the
NOBROADCAST command is given, again from the P1 console terminal or a privileged
job.
The CTYSET command, given from the P1 console terminal or from a job with the
DEV privilege, selects which terminal is to be used as the P1 console. This
allows an alternate CTY to be selected and run through the DCA line scanner, in
case the normal CTY isn't working or is being used to debug the console PDP-11.
The CTYSET command should be given with an octal argument specifying the DCA
port to use for the alternate CTY; or, to re-select the normal CTY, the CTYSET
command should be ended with an altmode.
The DCAAVG command, which is not really privileged, types out the average number
of DCA interrupts generated on various time scales. This information is
generally useful only to wizards.
The PITIME command, again not actually a privileged command, types out the
approximate percentage of time the computer spends in various states. This
information is useful mainly to wizards.
The unprivileged DQAVG command types out various averages of the disk queue
size, which is the number of jobs waiting to use the disk.
A1 SNAIL
SNAIL is a program which interprets certain monitor commands for editing files,
compiling and loading programs, and loading the line editor buffer. It
simplifies these tasks when necessary by expanding concise user commands into
the different forms used by editors, language processors, and the loaders.
Without user intervention, SNAIL will run the correct language processors to
translate the user's files, and will run a loader to create an executable core
image containing the user's program. SNAIL also provides a convenient means of
communication between editors and other processors.
SNAIL knows about certain standard processors. These are the editors: SOS and
TECO; the compilers: SAIL, FAIL, F40 (FORTRAN), MACRO, PALX, BLISS, AL, MIDAS,
PASCAL, and FASM; the document compilers: PUB, POX and TEX; the debuggers: BAIL,
RAID, and DDT; and the loaders: LOADER and LINK.
The E editor includes within it the SNAIL functions, so its "SNAIL" commands run
E directly rather than via the SNAIL program. Nevertheless, the E commands are
included here because they are operationally similar.
The SNAIL commands are divided into three classes: EDIT, COMPILE, and CREF.
A1.1 EDIT-Class Commands
There are six EDIT-class commands, two for each of the three commonly used
editors:
Command Name
Program Create File Edit File
E CETV ETV
SOS CREATE EDIT
TECO MAKE TECO
CREATE and MAKE
These commands take a file name as the argument. SNAIL will call the editor and
tell it to initialize the file of that name. For CREATE, SOS is started in line
insertion mode. TECO (the MAKE command) will be initialized to write on the
specified file.
EDIT and TECO
These commands take a file name (with optional project-programmer name) as the
argument. SNAIL remembers the name of the last file that was edited in a TMPCOR
file named ED. (A TMPCOR file is a simulated file kept in core by the monitor
until the job is logged out.) If an EDIT-class command is given without an
argument, SNAIL will use the argument that it remembered.
Normally, the user's SNAIL commands are forgotten when the job is logged out.
However, if both LOGIN:RPGSAV and LOGOUT:RPGSAV are included in the user's
OPTION.TXT file, then the TMPCOR files containing the commands will be stored on
disk between sessions. See Section 5.2.
If no extension is specified in the argument and no file with the given name and
blank extension can be found, then the user's directory is searched for any file
with the given name and one of several standard extensions. The standard
extensions are searched in the order:
FAI S1 SAI FOR F4 LSP WEB PUB POX TEX MSS MAC MID VLI LAP PAL AL
MF TFD MIC WRU NSA OSA PAS LST PPR CMD MSG TXT DO INI NS DIS
If none of these is found, the first file listed in the directory with the
correct name and any extension is edited. However, the following extensions are
never selected for editing:
REL DMP XGP FNT CFT TFX DRW WD PC WPC PLT PCP PLX LDI RIM FAS VRN
PIC BIN WL WLS PRE PRS TFM VNT ANT CRU PRF
If a user specifies a disk area other than his own current (alias) area, then
the edited file will be put on his disk area and the source (from the other
area) will not be changed.
The editors have a read-only mode in which files may be examined by using editor
commands, but not changed. To get read-only mode type /R after the file name in
the edit command (e.g., ETV M.SAI/R). Read-only mode in SOS prohibits any
commands that would change the file. In the E editor, the mode may be changed
from read-only to read-write at any time.
CETV, ETV, and EREAD
These are the create and edit commands for the E editor. They do not run the
SNAIL program; instead, E itself simulates the SNAIL functions. There are some
differences between these and the other editor commands:
1. The command can include /nP and /nL switches for page and line numbers and
the /N switch for no-directory mode as well as /R for read-only. E saves its
position in the file when it exits, so a later ETV command with no argument will
continue the edit from the same point in the file. An E command may also
contain a list of remembered files, pages, and lines for ease of switching
around. There are also other possible switches. A complete explanation is in
the file E.ALS[UP,DOC].
2. If you specify a PPN with the filename given, E will let you edit the file
on that disk area instead of copying the file to your current area as the other
editors do.
3. The EREAD command is equivalent to the ETV command with the /R switch, i.e.,
it edits the file in read-only mode.
READ
The READ command starts E in read-only mode, like EREAD, but looks for the file
to be edited in the system documentation areas [*,DOC] and [3,2]. The argument
to READ should be the name of a system program or concept for which you would
like documentation.
BOOK
The BOOK command starts E in a special mode, called book mode, used to read long
files over an extended time period. In this mode, E does several things
differently from the normal editing procedure:
1. If there is a file with the name in the BOOK command, the extension BKP, and
a PPN matching either that given in the command, your ALIAS PPN, or your login
PPN (tried in that order), it is used as a SNAIL file to determine where to
start editing the specified file. This "bookmark" file is not deleted by
LOGOUT, so you can continue reading at a later session. The file, if found, is
updated when you exit from E; if there was no BKP file, one is created on your
(alias) area when you exit. However, if you exit from E while on the last page
of the file, the BKP file will be deleted (E assumes you have finished reading
the book in this case).
2. A BOOK command with no argument uses TMPCOR files like the ETV command does,
but the TMPCOR filename used is different, so you can alternate ETV and BOOK
commands for different files with no confusion.
3. E does not allow you to modify the file when using book mode.
A1.2 COMPILE-Class Commands
There are three types of COMPILE-class commands: COMPILE-type commands, which
abbreviate a series of commands to compilers (and other language processors) and
loaders; DOCUMENT-type commands, which process a document; and LOADBUF-type
commands, which load the line editor buffer with a sequence of commands much
like the DO processor (see Section 5.7). Each COMPILE-class command, if given
with arguments, remembers both the command and the arguments in a TMPCOR file
named CM. This is useful because all the editors allow an exit-and-go command
(in SOS, the G command; in E, the CONTROL-X GO command; in TECO, the EG
command). The exit-and-go feature runs SNAIL in a special way which makes SNAIL
re-execute the command that it remembered.
A1.3 DOCUMENT-Type COMPILE-Class Commands
The DOCUMENT-type COMPILE-class commands are the easiest to describe. These
commands, PUB, POX and TEX, run the same-named document processors. Both
commands take a file name as an argument, with optional switches. If an
extension is specified with the file name, that file is processed by the
appropriate document processor. If, on the other hand, no extension is
specified with the file name, the user's directory is searched first for the
file with the given name and extension .PUB, .POX or .TEX, depending on the
command, then for the file with the given name and no extension. Whichever of
those files is found first is the one which will be processed by the document
processor.
Switches to the document processor may be specified in parentheses immediately
following the file name.
Examples of use:
POX FOO.POX
PUB FOO.PUB(LH)
TEX XXX
The last of these will run TEX on the file XXX.TEX if it exists, otherwise it
will run TEX on XXX.
A1.4 LOADBUF-Type COMPILE-Class Commands
The second type of COMPILE-class commands are the LOADBUF-type commands. There
are three such commands: RER, RERUN, and PROCESS. These commands take as
argument some text to be loaded into your line editor in order to be typed to
the monitor. SNAIL remembers the argument text last given to one of these
commands so that you can repeat the SNAIL command later without having to
re-type the argument text. These commands incorporate some of the features of
the DO processor, allowing the user to take advantage of the exit-and-go feature
of the editors for an arbitrary sequence of commands without paying the penalty
of running an extra processor.
The RER and RERUN commands are similar in form. Both are followed by a
processor name, an optional core size for the processor, a double-arrow, and a
string (called the object string) terminated by a line feed. SNAIL swaps
control to the designated processor after loading the object string into the
line editor buffer. The only difference is that the processor in the RER
command is retrieved from the SYS: disk area, while the processor in the RERUN
command is retrieved from the user's own disk area, or one that he specifies
explicitly. This distinction is the same one made between the R and RUN monitor
commands.
The PROCESS command is followed by a double-arrow and an object string,
terminated by a line feed. After loading the object string into the line editor
buffer, SNAIL exits.
The command PROCESS @ will load into the line editor buffer the text of the CM
TMPCOR file, i.e., the remembered COMPILE-class command of any type.
SNAIL preprocesses the object string for all three commands by replacing
occurrences of the character double-arrow ("↔") by a carriage return-line feed.
The DO processor also does this. However, the other character-replacement
features of DO are not currently implemented.
If any of these commands is given with no argument, then the command is executed
with the text that was last used as argument to such a command.
If a PROCESS command is given with no argument, the command TMPCOR file must
contain a PROCESS command. If a RER or RERUN command is given with no argument,
the command TMPCOR file must contain a RER or RERUN command. Otherwise an error
message will be printed and the line editor buffer will not be loaded.
The RER and RERUN commands are compatible in the following way. If you give
either of these commands with no argument after most recently giving the other
command, then the current command will be executed with the previous text. This
allows the user to alternate between running a system program and a private
(same-named) version, with the same text being given to both programs.
Examples of use:
RER IL↔(DSKIN FOO)↔
PROCESS↔R IL↔(DSKIN FOO)↔
RERUN IL[UCI,SYS]↔(DSKIN FOO)↔
The first two examples will do the same thing. The third example could be used
to allow alternating use of RER and RERUN to compare the current version of
ILISP with a new version.
A1.5 COMPILE-Type COMPILE-Class Commands
The last type of COMPILE-class command to be described is the COMPILE-type
command. There are six COMPILE-type commands: COMPILE, LOAD, PREPARE, DEBUG,
EXECUTE, and TRY. Following the command, the user lists files which are to be
compiled or loaded.
All COMPILE-class commands normally cause compilation of the specified source
files. All but the COMPILE command may cause execution of a loader (LOADER or
LINK) to create a core image, possibly including a debugger. The table below
summarizes the actions of the COMPILE-type commands.
REL file Core Image Debugger Execution
COMPILE yes
LOAD yes yes
PREPARE yes yes yes
EXECUTE yes yes starts the user program
TRY yes yes yes starts the user program
DEBUG yes yes yes starts the debugger
The COMPILE command takes as arguments one or more file descriptors, separated
by commas. SNAIL will cause the appropriate translator to be used for each of
the files. The COMPILE command does not produce a core image; to get an
executable core image one of the other COMPILE-type commands must be used.
LOAD does a COMPILE if necessary and then starts a loader (LOADER or LINK). The
loader takes the .REL files that were generated by the compilers and combines
them into an executable core image. When the loader is done, it exits to the
monitor. This command makes a core image but does not start it.
PREPARE is like LOAD, but a debugger (BAIL for SAIL programs, RAID for other
programs when the user is at a display, and otherwise DDT) is loaded with the
user's program.
EXECUTE is like LOAD, but instead of exiting, the loader starts the program it
loaded at its specified starting address.
The TRY command is like EXECUTE, but it loads a debugger (BAIL, RAID, or DDT, as
in the PREPARE command) with the user program. Execution starts at the
program's starting address.
DEBUG is like TRY except that rather than starting the user's program it starts
the debugger (RAID or DDT--if the debugger is BAIL this command is treated
exactly the same as TRY). The user may give commands to the debugger to start
his program, to plant breakpoints, etc.
SNAIL writes TMPCOR files for each processor involved in compiling or loading
the files specified in the user's command string. SNAIL also attempts to
minimize unnecessary compilations by checking the creation dates for the files
the user wants compiled; for example, if the command was
EXECUTE X1.SAI,X2.SAI
and the file X1.REL has a later creation date than the file X1.SAI, SNAIL
assumes that X1.SAI has not been changed since it was last compiled, and omits
X1.SAI when it tells SAIL which files to compile. If the REL file and the
source file have the same time written, then the file is compiled again for
safety, in case the source has been changed.
The user can override SNAIL's date-checking by specifying certain switches. A
SNAIL switch is selected by including a slash ("/") followed by the appropriate
switch name. Switches which affect the date-checking actions of SNAIL are the
following. A switch of the form /-XYZ turns off a previously set /XYZ.
/COMPILE Force recompilation without checking the dates of .REL files.
/REL Force loading from the .REL file if it exists.
/NOLOAD Don't issue a loading request for this file.
/LONLY (Implies /COMPILE, /NOLOAD, and /NODMP.) A listing should be
made for this file, but no load request for it should be issued.
/CONLY (Implies /COMPILE, /NOLOAD, and /NODMP.) A cross-reference
listing should be made for this file, but no load request for it
should be issued.
/LIBRARY (Implies /REL.) Force the loader to search this file as a
library.
/NODMP Don't include the .DMP file in date-checking or deciding which
file to give control to first. This switch has no inverse.
SNAIL remembers the last COMPILE-type command with arguments it was given, just
as it does for DOCUMENT-type commands and LOADBUF-type commands, in a TMPCOR
file named CM. This "remembering" may be turned off for COMPILE-type commands
by using the /NOCMFI switch; if this switch appears in a command, the CM file
will not be written for that command. This switch is useful when using either a
LOADBUF-type command or the DO processor, and including within the command
string another SNAIL COMPILE-class command; if /NOCMFI were not specified, the
second command would be saved in the CM file instead of the first.
The simplest way to translate several programs is to create them with file
extensions which define the processor to be used; then give a single COMPILE
command with all these names separated by commas. Extensions which SNAIL knows
about are the following:
.FAI signals a FAIL program
.SAI signals a SAIL program
.MAC signals a MACRO program
.F4 signals a FORTRAN program
.PAL signals a PALX program
.BLI signals a BLISS program
.AL signals an AL program
.MID signals a MIDAS program
.PAS signals a PASCAL program
.S1 signals a FASM program
SNAIL does not require file extensions to be typed explicitly. For the command
COMPILE FOO, SNAIL will look for any file named FOO and check its extension. If
a file FOO is found that does have one of the standard extensions, SNAIL will
select the corresponding translator. If a file does not have a standard
extension, SNAIL can be told which translator to use by giving that information
in the command string. (If a file has a standard extension, SNAIL cannot be
convinced to use some other translator.) The following switches tell SNAIL
which translator to select (/-PROC undoes the effect of a previously seen
/PROC):
/FAIL Process this file with the FAIL assembler.
/SAIL Process this file with the SAIL compiler.
/MACRO Process this file with the MACRO assembler.
/F4 Process this file with the FORTRAN compiler.
/PALX Process this file with the PALX assembler.
/BLISS Process this file with the BLISS compiler.
/AL Process this file with the AL compiler.
/MIDAS Process this file with the MIDAS assembler.
/PASCAL Process this file with the PASCAL compiler.
/S1 Process this file with the FASM assembler.
More on File Names
A project-programmer name (PPN) may be included with each file name in the
command for COMPILE-type commands, just like for other SNAIL commands. The PPN
specifies the disk area from which the file is to be read. The PPN, enclosed in
square brackets ([ and ]), usually follows a file name; in this case the PPN
applies only to the preceding term. If a PPN appears before a file name, then
that PPN is sticky (i.e., it applies to all the terms that follow) for the rest
of the command until another sticky PPN is seen.
A name followed by a colon (:) is a device name (which is sticky). Some devices
are non-directory devices (for instance, TTY: and MTA:); a file name need not
follow specification of such a device. For example, the command
COMPILE TTY:/SAIL
compiles, using the SAIL compiler, input from the user's terminal.
More on Switches
Switches are allowed in COMPILE-class commands by including a slash (/) and the
switch name, e.g., /LIST. Switches allow the user to select options. In
general, a switch placed before a file name is sticky. Switches placed after a
file name are not sticky; they apply only to the preceding term. Specifying a
minus ("-") before a switch turns off that switch. For example, the command
COMPILE/FAIL A,B,C/-FAIL
will compile the files A and B using the FAIL assembler, and will compile C
using some other translator depending on extensions of files with file name C.
Concatenation of Source Files
It is often desirable to break up a program into two (or more) separate files
which have only one END statement at the end of the last file. One reason for
breaking up a program is because it is very long, and it would be inconvenient
to keep and edit such a large file. Another reason for separating a program is
to allow a portion of the program text to be shared. Several files can be
processed together as one big translation by separating their names with plus
signs (+) rather than with commas. For example,
COMPILE DATA+PROGRM
treats the files DATA and PROGRM as if they were one large file and produces one
relocatable binary file, PROGRM.REL. SNAIL will not allow concatenation of
source files that specify inconsistent processors.
Normally, the REL file will have the name of the last file in the command
string; it can be given some other name by putting the desired name and an
equals sign (=) at the front of the argument list, e.g.,
COMPILE FOO=SYMS+PROGRM+IOPACK
would do one translation as if SYMS, PROGRM, and IOPACK were one large file and
produce relocatable binary output on the file FOO.REL.
Occasionally, a header file must be assembled with several other files, e.g.,
COMPILE ACUMS+SINE,ACUMS+COSINE,ACUMS+TANGNT
The brokets (< and >) feature allows this to be done more simply:
COMPILE ACUMS+<SINE,COSINE,TANGNT>
Brokets may not be nested. Also, a plus sign may not follow a right broket;
e.g., the following command is illegal:
COMPILE <A,B,C>+ENDS
Producing Symbolic Listings
Assembly listings have the original code as it appears in the file plus the
octal values that the code represents with the relative locations that the octal
values go in. Assembly listings can be generated by means of a /LIST, /LONLY,
/CREF, or /CONLY switch in the command.
The /LIST and /LONLY switches will produce a file with the same name as the REL
file and extension LST. Such a file may be spooled or typed. The two switches
differ in that the /LONLY switch implies /COMPILE, /NOLOAD, and /NODUMP; i.e.,
it means that the only thing to do with the file is make a listing for it, and
no REL file will be generated by the compiler for the source file. Note that
COMPILE FOO/LIST will not compile anything if a current FOO.REL exists (this is
another instance where the /COMPILE switch is useful). The /LIST may be used as
a sticky switch or it may be applied to particular terms. The inverse switches
are /-LIST and /-LONLY. (Processors other than the assemblers may also produce
listings.)
If either the /CREF switch or the /CONLY switch appears, instead of /LIST, it
generates an expanded listing that includes a list of all the symbols
(identifiers) used in the program and the line numbers on which each symbol
appears. This is called a cross-reference listing. These listing files cannot
be printed directly. Instead, they must be processed by the cross-reference
lister program, CREF. This is done by the CREF command (see page 104). The
/CONLY switch differs from the /CREF switch in that the source file will always
be compiled, and no binary file will be generated by the compiler for the source
file. The distinction between the /CREF and /CONLY switches is the same as that
for the /LIST and /LONLY switches described above. Note: not all the processors
can produce a cross-reference listing. Consult the appropriate manual to find
out if a given processor is capable of generating one.
Generating Core Images and DMP Files
The commands EXECUTE, DEBUG, LOAD, PREPARE, and TRY each generate an executable
core image. Core images are made by translating source files (as in the COMPILE
command) and then running a loader (either LINK or LOADER), which takes the REL
files and produces a core image from them. For the DEBUG, PREPARE, and TRY
commands, the loader is instructed additionally to load the program symbol table
and a debugger, namely, BAIL (for SAIL programs), RAID (if on a display), or DDT
(on a non-display).
Several SNAIL switches are relevant to the selection of a loader, and to the
actions of the loader once it starts loading. These switches are listed below.
They can be negated with /-SWITCH.
/LINK The LINK loader will be used to create the user's core image. LINK
is sometimes able to load a program that LOADER cannot (LOADER may
get a monitor error during loading).
/LOADER The LOADER loader will be used to create the user's core image.
/BAIL If the command specified a debugger (i.e., if the command was
DEBUG, TRY, or PREPARE), BAIL will be loaded.
/RAID If the command specified a debugger, RAID will be loaded.
/DDT If the command specified a debugger, DDT will be loaded.
/MAP The absolute values of all the global symbols will be listed in a
legible way on a file named MAP.MAP; this may not work for LOADER.
/SAISEG The Sail segment will be loaded instead of the Sail library being
searched.
/SAVE A disk dump will be made of the core image. The dump file will
have the same name as the first REL file and extension .DMP; it can
be given some other name by putting the desired name and a left
arrow (←) in the command string. /SAVE is unnecessary if the
left-arrow construct is used.
The command
TRY DUMP←SINE,COSINE/SAVE
translates the programs SINE and COSINE, producing SINE.REL and COSINE.REL. The
LOADER is run. Because the TRY command requests a debugger, either BAIL.REL,
RAID.REL, or DDT.REL is loaded from the system area. SINE.REL and COSINE.REL
are loaded next. Then the LOADER makes a dump copy of the core image in the
file DUMP.DMP and starts the program.
If there already exists a DMP file of the right name and if it has a creation
date more recent than those of the source files, no loading will be done.
Instead, the dump copy itself will be called in. Reloading may be forced by the
/NODMP or /NODUMP switch in the command line. Both an equals sign and a left
arrow may be included in a command string. For example:
COMMAND REL DMP
TRY SINE+COS/SAVE COS.REL COS.DMP
TRY DUMP←SINE+COS/SAVE COS.REL DUMP.DMP
TRY DUMP=SINE+COS/SAVE DUMP.REL DUMP.DMP
TRY FOO←DUMP=SINE+COS/SAVE DUMP.REL FOO.DMP
Library Searches
Several REL files may be combined into a library. A library is a special REL
file from which routines may be independently selected. Library files are made
by combining REL files together using the FUDGE2 program (which is described in
DEC documentation). For example, sine, cosine, and tangent routines might be
combined into a trig library, TRIG.REL. Then, if a particular program used just
the sine routine, instead of loading the entire trig package it would be able to
select only the sine routine. The loader will search library files and load
only the programs that are needed. The /LIBRARY switch after the name of a
library file tells SNAIL to request this loader feature. The /LIBRARY switch
may also be used as a sticky switch; its inverse is /-LIBRARY. Suppose there is
a program called NLT which uses the sine routine that was included in TRIG.REL.
Then the command LOAD NLT,TRIG/LIBRARY will cause NLT to be loaded and TRIG to
be searched. The LOADER notices that NLT requires SINE.REL and searches
TRIG.REL for it. Suppose another program, XLT, requires routines from two
library files, TRIG.REL and IOPACK.REL, and must be loaded with another program
LT. Then any one of the following commands could do this:
LOAD XLT,LT,/LIBRARY TRIG,IOPACK
LOAD /LIBRARY XLT/-LIBRARY,LT/-LIBRARY,TRIG,IOPACK
LOAD XLT,LT,TRIG/LIBRARY,IOPACK/LIBRARY
Programs which use library files must be placed before the library file names in
the command. This is because the loader cannot know what routines to extract
from each library until it has loaded the programs that require library
routines. Programs are loaded (or searched) in the order given in the command.
Alternate Processor Features
Processors other than SAIL, FAIL, FORTRAN, PALX, MACRO, BLISS, AL, MIDAS, PASCAL
and FASM may be specified by using the alternate processor feature. The switch
/PROCESSOR DEV:NAME specifies an alternate processor. In this switch, DEV
(assumed to be DSK, if absent) is the device name on which to find NAME.DMP, the
core image file of the alternate processor. Once the /PROCESSOR switch is used,
SNAIL will recognize the extension NAM (i.e., the first three letters of the
processor name) and the switch /NAME (the processor name) in the command line.
A project-programmer name or device name may be used in specifying the alternate
processor.
For example, for a user to translate the program SINE using a processor named
PROC on his disk area, he could use the command:
COMPILE SINE/PROCESSOR PROC
When a standard processor is used, it is known that it will take a text source
file and produce a binary REL file, and possibly a text LST file. With
alternate processors there is no such guarantee. An alternate processor may
process a text file into a new text file which becomes input to a standard
processor. It is possible to specify all these functions in a single
COMPILE-type command.
If an alternate processor generates a text file instead of a REL file, loading
must be inhibited. The /NOLOAD switch accomplishes this. The /NOLOAD switch
must be used for each term that does not produce a REL file (except in the
COMPILE command, which does no loading anyway). The inverse switch is /-NOLOAD.
Suppose the preprocessor, PRE, translates the file BAZ into a file FOO which is
a FAIL program. FOO must be translated when PRE is done. Also, MAIN and SINE
must be translated and loaded with FOO. The command:
LOAD FOO=BAZ/PROCESSOR PRE/NOLOAD,MAIN,SINE,FOO/FORWARD
will do all of this. The /FORWARD switch is necessary because the file FOO does
not exist at the time the command is given. Including the /FORWARD switch
prevents SNAIL from looking for FOO; SNAIL will assume that FOO magically
appears before FAIL is called. The inverse switch is /-FORWARD.
The processor DO (see Section 5.7) is another example of an alternate processor.
The DO program writes the CM TMPCOR file to force the exit-and-go command from
the editors to run DO again.
Translator Switches
Switch names enclosed in parentheses "(" and ")" are passed directly to the
translator. The documentation for each of the translators explains what
switches are available. The switches passed in this way appear on the source
file specification. Sometimes it is necessary to put switches on the binary or
listing term. For this purpose, there are two other switch constructions.
The construction (#1,#2), where #1 and #2 are any switch strings, passes #1 to
the binary term and #2 to the source term. The construction (#1,#2,#3) passes
#1 to the binary term, #2 to the listing term, and #3 to the source term. For
example,
COMPILE/LIST FOO(AX,BY,CZ)
will pass the switch string "AX" to the binary term, "BY" to the listing term,
and "CZ" to the source term.
Loader Switches
Switches to the loader may be specified in a COMPILE-class command. Switches to
LOADER appear as a percent sign (%) followed by a letter (or a number and a
letter) in the command string of one of the LOAD, TRY, EXECUTE, PREPARE, or
DEBUG commands; switches to LINK appear as a percent sign followed by some
character not appearing in the switch string, followed by the switch string,
followed by the character that appeared after the percent sign. In either case,
the switch string is directly specified to the appropriate loader. Examples:
EXECUTE FOO1,FOO2,FOO3%M
TRY BIGPRG.SAI%100K
TRY/LINK BIGPRG.SAI%"RUNCOR:100"
LOADER and LINK switches are listed at the end of this appendix. For a full
description of what the other switches above mean, consult the DEC documentation
for LOADER and LINK. The LOADER has been modified for WAITS, so the DEC
documentation does not accurately reflect the state of the software. Consult a
wizard if necessary.
Command Files
COMPILE-class commands are sometimes too long to fit on one line, or are too
complex to be typed correctly every time. To solve this problem, arguments can
be read from a file. The text contained in such a file is read by SNAIL as if
it had been typed as the arguments to a command. The command file may contain
any features available in a COMPILE-class command. Any text between a semicolon
and the next line-feed is ignored; carriage-returns and line-feeds are also
ignored, and hence may not be used to separate file names or other identifiers.
To use a term as a command file write an at sign (@) before the command file
name, e.g., LOAD @SYS. Upon scanning the at-sign followed by a file name, SNAIL
looks for a command file with that name; if no extension was specified, SNAIL
checks first for the file with extension .CMD, then for the file with no
extension and the specified name. The command file SYS might look like the
following file which is used to assemble the entire operating system:
%S%B%? WAITS=HEAD(XLR)+OUTER+NETDEF+JOBDAT+CACDAT+UNCDAT+P2COMM;
+LOWCOR+PARSER+SYSINI+MPXSER+KLSER+COMCSS+CLKSER+PAGSER;
+UUOCON+SPWSER+SCHEDU+SWPSER+CORE;
+DPYSER+TTYSER+VDPSER+LINED+DLNSER;
+DSKSER+DTCSER+MTCSER+TVSER+LPTSER+ELFSER+CARSER;
+XGPSER+PTPSER+PTRSER+IMPSER+PUPSER+NULSER;
+TAIL+DDT+ONCE
A1.6 CREF Command
This command causes a cross-reference listing to be made. All the files made
from COMPILE-class commands which used the /CREF switch are processed; for each
such file, a cross-reference listing is generated in a file with extension LST
and the name of the file being processed. (LOGOUT makes SNAIL forget which
listing files to process.) The CREF command activates SNAIL which in turn
activates the CREF program in a special way. The CREF program when activated in
this way reads a file that SNAIL wrote which contains the names of the files to
process.
A1.7 SNAIL Switch Function Summary
Switch Abbrev Meaning
/AL /A Use AL for this term.
/BAIL /BA Use BAIL if a debugger is required.
/BLISS /BL Use BLISS for this term.
/COMPILE /COM Force re-compilation without checking the dates of REL
files.
/CONLY /CON Force re-compilation and produce only an extended listing
to be input to the CREF processor.
/CREF /CR Request a cross-reference listing.
/DDT /D Use DDT if a debugger is required.
/F4 /F4 Use F40 (FORTRAN) for this term.
/FAIL /FA Use FAIL for this term.
/FORTRAN /FORT Use F40 (FORTRAN) for this term.
/FORWARD /FORW Prevent SNAIL from looking for this file to decide if the
REL file is up to date.
/LIBRARY /LIB Force the loader to search this term as a library.
/LINK /LIN Use the LINK loader to create the core image.
/LIST /LIS Request a listing file.
/LOADER /LOA Use the LOADER loader to create the core image.
/LONLY /LON Force re-compilation and produce only a listing file.
/MACRO /MAC Use MACRO to translate this term.
/MAP /MAP Request a loader map of global symbols.
/MIDAS /MI Use MIDAS for this term.
/NOCMFI /NOC Don't generate a CM command file for this command.
/NODMP /NOD Force re-loading without checking the dates of DMP files.
/NOLOAD /NOL Prevent a loading request for this term.
/NULREL /NU Send compiler output to the NUL device (discarding it).
/PALX /PAL Use PALX to translate this term (produces .BIN file).
/PASCAL /PAS Use PASCAL for this term.
/PROCESSOR /PR Specify an alternate processor.
/RAID /RA Use RAID if a debugger is required.
/REL /RE Force loading from the REL file if it exists.
/S1 /S1 Use FASM to translate this term (produces .LDI file).
/SAIL /SAIL Use SAIL to translate this term.
/SAISEG /SAIS Load SAIL programs with the SAIL segment instead of the
SAIL library.
/SAVE /SAV Force the LOADER to make a DMP file of the core image.
A1.8 LOADER Switches and LINK Equivalents
LOADER LINK Meaning
Switch Equivalent
%A %"CONTENT:ZERO" Causes a listing of all global symbols to be
printed.
%B %"SYMSEG:LOW" BLT symbols down when done loading.
%1B BLT symbols to upper segment.
%C Chain beginning with Common.
%D %"TEST:DDT" Load DDT.
%E %"EXECUTE" Start up program when done loading.
%F %"SYSLIB" Enter library search mode; search all default
libraries.
%G %"GO" Finish loading, make final links, and exit.
%H %"DEBUG:RAID" Load and start RAID.
%I %"NOSTART" Ignore starting address of this program.
%J %"START" Use starting address of this program.
%nK %"RUNCOR:n" Adjust to n K of core (2n pages) when done loading.
%L %"SEARCH" Search this file as a library.
%M %"MAP:END" Print storage map.
%N %"NOSEARCH" Leave library search mode.
%nO %"SET:.LOW.:n" Set program origin to n, absolute.
%P %"NOSYSLIB" Inhibit automatic library search for undefined
globals.
%Q %"SYSLIB" Allow automatic library search.
%R Chain beginning with resident module.
%S %"LOCALS" Load symbol table also.
%T %"DEBUG:DDT" Load and start DDT.
%U %"UNDEFINED" Print current list of undefined globals.
%V %"TRY:RAID" Load RAID.
%W %"NOLOCALS" Load without symbols.
%X %"CONTENT:NOZERO" Do not list all globals.
%Y Load SAILOW for 2 segment SAIL programs.
%Z %"RUN:LINK" Restart LOADER.
%< Disallow loading into upper segment.
%1< Allow loading into upper segment and load there
next.
%n< (n≥400000) Set upper segment relocation to n.
%-< Allow loading into upper segment and load in lower
next.
%? Sort symbols.
A1.9 Error Messages
Obvious errors
No command file.
Incompatible commands.
You gave a command with no arguments, and either no command had been
saved or the two commands (the one you typed and the one which had been
saved) aren't compatible.
Unrecognizable file name.
No such device.
Unrecognizable processor name.
You mistyped a file or processor specifier.
Not a display.
You're trying to load the line-editor buffer and you're not using a
display.
Missing double-arrow or invalid core size.
Missing double-arrow.
The LOADBUF-type commands must always be followed by a double-arrow.
Too many files.
Currently the PUB, POX and TEX document compilers can only process one
document at a time.
File not found.
Either some file named in the command does not exist, or it doesn't
exist with the correct extension. You'll get this message if you try to
use the /FAIL switch with FOO.SAI, for instance.
Unknown command.
Command error.
Illegal character.
Something is wrong with what you typed, and SNAIL didn't find in the
command what it expected to find. For example, a file name didn't
follow an at-sign.
Nested brokets illegal.
Unbalanced brokets.
Can't use "=" with brokets.
You're not using brokets correctly. Each of the files within the
brokets will produce a different REL file, so the equal-sign construct
can't be used.
Unknown switch.
Negation of this switch not allowed.
Invalid switch string.
Illegal LOADER switch.
Illegal LINK switch.
Subtle errors
Empty command file.
Error in command file.
Tmpcor file too big.
The CM command file which SNAIL is attempting to read is messed up
somehow.
Storage overflow.
Your command included too much of something (file names, device names,
alternate processor specifications, translator or loader switches), or
there are too many files in your directory that have to be date-checked.
Horrible errors (a wizard should be consulted)
SNAIL bug.
SNAIL allocation error.
Typing CONTINUE followed by a carriage return when the latter happens
might work.
Can't open channel.
This is probably a bug in SNAIL.
Couldn't create file.
A disk file could not be written correctly. Possibly a file is write
protected or in use by some other job. Otherwise you may need help.
UFD missing.
You are aliased to a non-existent disk area. Otherwise, you need a
wizard.
A2 COPY
COPY is a utility program for file manipulation. It can copy files, rename
then, delete them, and list their names (along with size and other information).
This appendix first describes the basic COPY command with all possible options,
and then lists the other monitor commands which run COPY and describes their
special functions.
A2.1 Syntax
In this section the following rules are observed. Anything in curly brackets
({...}) is optional. Anything enclosed in brokets (<...>) has a syntactic
definition of its own and is described elsewhere. Upper and lower case letters
are legal anywhere. A break character is something which is not a letter, a
number, or a "*". This will become important when you try to figure out some of
the error messages. The term sticky means that the sticky item is applicable
until changed or until the end of the current command.
The basic syntax for all COPY commands is:
COPY {{<destination term>}{,<list term>}←}<source term>
The character "{ }="{ } may be substituted for "{ }←"{ }.
<destination term>::=<switch term>
<source term>::= <switch term>{,<source term>}
<switch term>::= {<switch list>space}<term>{<switch list>}
<list term>::= <term>
<term>::= {dev:}{filnam{.ext}}{[prj,prg]}
| {<switch list>}{dev:}{[prj,prg]}{<switch list>}
@<spec term>
| \<filehack selector>
| ∂{ <prg> | * }{.ext}{[prj,prg]}
<spec term>::= {<spec switch list> }{dev:}{filnam{.ext}}
{[prj,prg]}{<spec switch list>}
<switch list>::= {/<switch>}{(<page list>)}{<switch list>}
<spec switch list>::={/<switch>}{<spec switch list>}
<page list>::= <page term>{,<page list>}
<page term>::= N{:M}
A2.2 General Operation
COPY reads data from the logical file(s) indicated by the source term, performs
any operations requested by the switch term(s), and writes the data on the
logical file indicated by the destination term. Any listing information goes to
the list term.
The device and ppn are sticky in the source; that is, if they are absent, the
last one specified is used. The default device is DSK and the default ppn is
your current alias.
A single * may be substituted for any of the following: filnam, ext, prj, prg.
A * in the source term means "all." A * in the destination term means "same as
in source file being transferred."
If filnam.ext is absent in the destination term, *.* is assumed. If the
destination filnam.ext are specified (no *'s), all source files will be
concatenated into one big file with that name.
For example:
COPY DING←FOO,BAZ
would cause a file named DING to be created on your disk area comprised of the
files FOO and BAZ from your area. If filnam.* or *.ext is used in the
destination term, the source files will be copied onto the destination one by
one with the new filename or extension. <destination term>← may be left out and
DSK:*.*← will be assumed. For source terms with directory devices you must
specify the filnam.ext.
If you try to write on top of a file which already exists, you will be given the
option of deleting it or not. If any of the source files you have specified do
not exist, you will be informed and given the proper option.
If a string of source descriptors is specified, the string is executed from left
to right.
You cannot write a file in two different modes (e.g. FIL1←TTY:,DSK:FIL2).
However FIL1←TTY:,DSK:FIL2/ASCII is quite acceptable (/ASCII causes the data
mode to be 0). Data modes are explained in the UUO Manual.
The <spec term> construct causes the scanner to continue scanning in the file
specified by the term. The term must indicate a unique file. When end of file
occurs the scanner again reads from the terminal. No spec terms may appear in
the file. Switches preceding the "@" are treated as sticky switches. Switches
following the "@" are treated as sticky switches only while reading from the
indirect file. In a sense the indirect file is a "program block." Upon leaving
the "block" all defaults are reset to those in force just before the "@". A
device name and ppn may precede the "@", in which case the defaults are changed
to those, but no operation is done. The device and ppn used in the spec term do
not affect the current defaults.
The \<filehack selector> construct for a term is a special shorthand feature to
allow commonly referenced files which would normally require a large amount of
typing to be entered quickly. The following is a list of legal filehack
selectors and what they are short for (<prg> stands for the current programmer
name right justified). Only enough letters to uniquely identify the name among
those in this list need be typed.
Filehack File selected What for?
\MSG <prg>.MSG[2,2] Current user's mail file
\MAIL <prg>.MSG[2,2] Current user's mail file
\PLAN <prg>.PLN[2,2] Current user's plan file
\PLN <prg>.PLN[2,2] Current user's plan file
\NAP <prg>.NAP[2,2] Current user's NS notification file
\NS <prg>.NAP[2,2] Current user's NS notification file
\RPG *.RPG[*,<prg>] All of current user's RPG files
\OPTION OPTION.TXT[*,<prg>] All of current user's option files
\BBOARD BBOARD.TXT[2,2] System bulletin-board file
\DOWN MAINT.TXT[2,2] System downtime forecast
\DIGEST DIGEST[2,2] Latest A.P. news digest
\NEWS NEWS[2,2] Latest N.Y. Times news summary
\NOTICE NOTICE.TXT[2,2] System message file
\GRIPES GRIPES.TXT[2,2] System gripe file
\GOLD GRIPES.OLD[2,2] System gripe archive file
\DAY DAY.TXT[2,2] Daily birthday or holiday message
\FORWARD FORWRD.TXT[MAI,SYS] Mail forwarding list
\CSD CSD.BBD[INF,CSD] Bulletins of interest to CSD members
The filehacks which implicitly use the current programmer name to select a file
can also be given an explicit prg in the form \HACK:<prg>.
The ∂{<prg>|*} construct is another form of shorthand for referencing MAIL files
(see Appendix 4). If no argument follows the ∂ then the current user's mail
file is indicated. If <prg> is used, it means that user's mail file. And
lastly, if * is used the file NOTICE.TXT[2,2] is selected (this is the public
mail file). The default extension (.MSG) and PPN ([2,2]) implied by ∂ can be
explicitly overridden, e.g., ∂PRG.PLN will get user PRG's plan file.
There is a page counter in COPY which monitors ASCII output for form feeds.
When a form feed is encountered, the counter is incremented. If a page list is
used in a term, N is taken as the starting page of this output and M (or N if M
is absent) as the ending page. Output is only active when the counter is within
the range of the page list (e.g., TYPE COPY(21) would type out page 21 of the
file COPY). When the end of the first term is exhausted, control is transferred
to the next term, and so on until the right parenthesis is reached, at which
point output ceases. If more than one file is indicated, the page list is
re-scanned for each one. Page lists are never sticky. An asterisk (*) may be
used in a page list instead of the final page number, to denote the last page,
e.g., TYPE COPY(3:*) would type all but the first two pages of the file COPY.
Switches will be described in a section of their own. See /LIST for an
explanation of "list term."
Logical device names may be used, but all switches apply to the physical device.
The following are legal physical devices for the copy command:
DSK UDPn DTAn MTAn TTYn
XGP PTR PTP TTY
When the special character ↓ (↑A on non-displays) appears, the scanner will read
the line character-by-character without interpretation until the next ↓ (or ↑A).
This is useful for allowing non-alphameric characters to be included in
filenames, e.g., editor or spooler temporary files.
For numeric input there is always a default radix (either decimal or octal).
Sometimes, however, it is desirable to force one or the other. A number
preceded by a single quote is always interpreted in octal. A number preceded by
a double quote is always interpreted in decimal.
A2.3 Device Peculiarities
Non-Directory Devices:
If the source device doesn't have a directory and the filename and/or extension
is specified by a *, then a generated filename and/or extension is used. The
generated filename starts out as AAAAAA and the generated extension starts as
COP. Either of these may be changed by specifying a filnam.ext in the source
term. If a star (*) is used, the old name is retained; otherwise it is replaced
by the new one. At the beginning of each term the filename is either changed to
that which was specified or incremented by one letter (i.e., AAAAAZ.COP is
followed by AAAABA.COP). The following example may clear things up:
COPY DSK:*.*←MTA0:,,FOO.*,,*.BAZ
This would read 5 files from MTA0 and give them the following names:
AAAAAA.COP
AAAAAB.COP
FOO.COP
FOOA.COP
FOOB.BAZ
Disk:
You may delete files belonging to other users (please exercise extreme care).
However, if you attempt to delete a file on a user file directory whose
programmer name is different from the one you used when logging in, you will be
asked if you are sure. All normal file protection applies to deletions.
User Disk Pack:
COPY treats new format (file structured) UDPs like the main file disk. The
file-structure simulation which COPY provided for old format UDPs is no longer
available.
DECtapes:
DECtapes are assumed to be in PDP-6 format (which is the current format our
system uses). See the UUO Manual for an explanation of DECtape formats. If the
directory becomes full (more than 30 files), you will be told which was the
first file not transferred. If the DECtape becomes full, the file currently
being written may be incomplete. An attempt is made to detect this condition
before the transfer is initiated, but this is not always possible. The total
file capacity of a DECtape is about 71.4K words. In order to write on a DECtape
the OFF-WRITELOCK-WRITE switch must be in the WRITE position. If not, you will
be told to set it.
Magnetic tapes:
Mag tapes may be made to look like directory devices by use of the /SAVE switch
which is described later. All mag tape switches are separate for input and
output (see rules about switches in switch section). This means that mag tape
switches in the destination term don't apply to the source terms.
Paper tape:
Paper tape I/O is done in binary non-checksummed mode unless otherwise specified
(see /ASCII). You should turn off the paper tape reader when you are done. A
paper tape with a jagged end may cause spurious data to be read. It is best to
tear it evenly at a fold.
Terminals:
On display terminals, COPY displays the number of the page being read (if
reading in ASCII mode).
Spooling pseudo-devices:
COPY recognizes two pseudo-device names, TPL: and PGX:, to allow spooling of the
output of some copy function to the line printer or XGP, respectively. These
device names may be used only in output terms, and may not be used with file
names. COPY creates a file on the [SPL,SYS] directory containing the desired
output, and enters a spooling request for the appropriate device. The file is
deleted after spooling. For a standard COPY command, the effect is essentially
equivalent to the recommended SPOOL/RECOPY (see page 115); the main advantage of
this capability is for direct spooling of list terms, e.g.,
DIRECTORY TPL:←[*,SYS]
to spool a list of the [*,SYS] file directories. (Note: It is claimed that
these pseudo-device names stand for The Pseudo Lpt and Pseudo Graphic
Xerox-machine respectively.)
A2.4 Switches
The term sticky means "applies until the end of the line or until changed
temporarily or permanently by some means." Most switches appearing in the
destination term are carried over as sticky switches in the source. Those
switches which are separate for destination and source terms are indicated by a
star (*) preceding the switch name. Switches appearing in the source term are
sticky only if they precede the term with which they appear. Otherwise, they
apply only to the current term and must follow it. Only the first six
characters of a switch are significant. You are only required to use enough
characters to uniquely specify the switch.
The following switches are available:
SWITCH ABBREV MEANING
ACCESS AC This causes any disk privileges you have to be enabled, so
that if you are a wizard you can help a poor user diddle
his files even if they are normally protected from you.
ALL AL This switch includes all of the input file in the output
even if the file uses the offset feature on the disk to
"hide" some data at the beginning. See the disk offset
feature in the UUO Manual.
ASCII A This forces transfers to be in ASCII. Beware! This switch
will cause SOS line numbers to become part of the text.
ASK ASK This causes dev:filnam.ext[prj,prg] to be printed for each
file under consideration followed by a question mark. If
you answer "Y" the operation will proceed, if you answer
"G" the operation will proceed but you will not be asked
the for the rest of the term, otherwise the file will be
skipped.
BINARY B This causes the data mode to be 13 and forces word by word
transfer of data.
BLOCKED BL This causes records to be ended on output whenever they
are ended on input.
BONLY=n BO This switch implies /SEARCH but causes only those files
that are bigger than nK to be listed. If the "=n" is
omitted, n=256(K) is assumed.
CONVERT C This causes copy to treat the character following a line
feed and the first character of a file as a FORTRAN
control character. Be careful, this happens on output.
*DENSITY=n DE This sets the density in bpi to n where n equals 800, 556,
or 200. This switch is ignored for devices other than mag
tapes. The system default density is 556.
*DSPOOL DS This switch, when used with destination or list terms,
causes the output file to be spooled with the /DELETE
switch. Output device must be disk. This switch is
illegal in source terms.
DUMPED DU This causes each 36 bit word from the input device to be
converted to the ASCII representation of the octal number
it represents and to then be sent to the output device.
The following format is used. A "word number" is sent to
the output device which indicates which word in the file
is the first word in this row. Then 8 data words are
transferred. Then a <cr><lf> is inserted. If desired, a
"page list" may be used for /DUMP; however, the values are
those of word addresses in the file instead of pages.
However, if the /SEARCH switch appears before this switch
(or the DIRECTORY monitor command was typed), this switch
has a different meaning: it includes in the directory
listing the date on which the file was last included in a
system DART dump, and the number of the tape on which it
was dumped. If the file has been permanently dumped twice
or more, the character ">" appears after the tape number.
*EVEN EV This sets mag tape transfers to even parity.
EXTRA=n EX Whenever a line feed is seen n extra line feeds are put
out; n must be an unsigned decimal integer. If n=0 line
feeds are converted to a 177 followed by a 21; this
inhibits form ejection at page boundaries on the line
printer.
EXTRA≡n EX (Note "≡" not "=".) This switch, used with the XGP only,
sets the inter-line spacing to n raster units.
FAST F All the names specified by the source term are listed (no
size or other info). This switch is therefore much faster
than /SEARCH.
FONT#n=file FON This switch is used when copying to the XGP to select a
font. Font number n (default is 0) is taken from the
specified file. The file specification can include any of
filename, extension, and PPN; the defaults are
GACS25.FNT[XGP,SYS].
FOO FOO This switch is used to produce a file directory listing
meant to be read by a program rather than by a human
being. The switch name derives from the fact that the
switch was created for the benefit of layout and drawing
programs used in the design of the late, lamented SUPER
FOONLY computer.
FULL FU If /SEARCH is specified, this switch provides more
information than is usually given in the directory
listing; specifically, it implies /UFDPRO, /TIME,
/PROTECTION, /WRITER, /REFERENCED, and /DUMPED. This
switch does not automatically imply /SEARCH.
GTOTAL G At the beginning of the execution of a term the term is
printed. At the end of the term, a line is typed of the
form
TOTAL= n Blk m.m Blk pp%
where n is the number of whole disk blocks used up by the
file(s), m.m is the data size of the file(s) in blocks and
tenths, and pp is the percent of the block space which is
actually used by data. This switch implies /SEARCH.
HEADER H This causes a header to be put at the top of each output
page. The header looks like this:
DATE TIME FILNAM.EXT PPN PAGE N-M
The current date and time are used, N is the logical page
number (number of form feeds seen plus one), and M is the
physical page of that logical page.
IGNI IGNI This causes input errors to be ignored (no message).
IGNO IGNO This causes output errors to be ignored.
KILL K The input file is deleted after the transfer is finished,
even if the output filename is the same as the input
filename. If the 200 bit in the file's protection code is
on, COPY asks before deleting the file.
LIST L This causes the names of the files transferred during that
term to be listed. If the input device is the disk the
ppn is also listed. Non-directory devices will obviously
list nothing. The output will go to the "list term". If
the list term is absent, the output will go to your
terminal.
*MLENGTH=nnnn M This allows the user to specify nonstandard length records
for mag tape I/O, where nnnn is a 1 to 4 digit number
interpreted in octal which specifies the number of data
words per record.
NONUMBERS N This deletes line numbers from files that have them. This
forces an ASCII mode transfer; in fact, /NONUMBERS can be
used on any ASCII transfer. Do not use this switch on
anything but text files or you will be sorry.
NOFF NOF This suppresses output of formfeed characters. It implies
/ASCII, and can be applied to single source files.
NOSPACES NOS This switch eliminates spaces at the end of a line.
ODD OD This sets mag tape transfers to odd parity. This mode is
standard and is the default option.
OFFSET OF This switch implies /SEARCH and causes the file offset (in
decimal) to be included in the directory listing. The
offset, if any, is the number of "hidden" records at the
beginning of the file which will not normally be seen when
the file is read. See the UUO Manual for more information
about offsets.
OONLY OO This switch implies /SEARCH but causes only those files
with non-zero disk record offsets (see OFFSET above) to be
listed.
OPTIMIZE OP This forces COPY to treat the file as one produced by SOS,
and to pack it by allowing lines to span a record break as
long as line numbers are not the last word of a record.
SOS will read an OPTIMIZEd file, but will not write a
record ending with a partial line. A file which cannot be
read by SOS because of line numbers or page marks at the
ends of records will be "fixed" by this switch.
PAUSE PA This switch is effective only for output to the terminal.
It causes output to pause before each element of a page
list if one is specified, e.g., for the command
TYPE FILE(2,3:7,14) before pages 2, 3, and 14, or before
every page if no page list is used. It also pauses after
the last page, before typing EXIT. You must type RETURN
for the output to continue. The switch is intended for
typing documents on a hardcopy terminal.
PROTECTION PR If this switch is preceded by /SEARCH (or used with the
DIRECTORY monitor command), it causes the protection of
the listed files to be included in the listing and implies
the /UFDPRO switch to print the UFD protection and the
UFD's default file protection. Otherwise, it must be
given with a protection code and has a different meaning,
as in the following paragraph.
PROTECTION=nnn PR This causes the output file to have the protection nnn,
where n is a digit from 0 to 7. All three n's must be
present. This switch applies only to disk output. If no
protection switch is specified, the protection of the
input file is used (for non-disk input 000 is used). When
concatenating files, the protection applicable to the
first file transferred is used.
QUIET Q This switch prevents you from getting the message "FILE
ALREADY EXISTS...." If the output file already exists, it
is deleted without a sound. Also, if this switch appears
with /SEARCH, then only the ppn and the size on that ppn
are printed. This switch also prevents being asked for
confirmation when trying to delete a file with the 200 bit
on in its protection code. Finally, this switch
suppresses the confirmation normally required to go on
after a named file is not found in a COPY, DELETE or
RENAME command; thus DELETE/Q FOO,BAR,BAZ can be used in
BATCH and DO files to make sure the three files do not
exist.
REFERENCED REF This switch is like /SEARCH below, but includes in the
directory listing an extra column containing the date on
which each file was last read (referenced by LOOKUP). It
also includes the percent of days referenced; this percent
is typed immediately after the reference date, as a two
digit number. The percent of days referenced is based on
the count of days referenced that is now maintained by the
system for all disk files. Since the days-referenced
count has been maintained only since 21 May 1979, the
percentage considers only the days since then. For files
that have been written on the day when the command is
given, no reference percentage is printed. A percentage
of 100 is printed as 99 to conserve one column.
RENAME REN A rename is done on the input file with the output file
information. /QUIET can be used when the output
filnam.ext already exists.
*SAVE SA If the output device is a mag tape, four words of
directory information are written. If the input device is
a mag tape, four words of directory information are read
and compared with the source name specified. If they
don't match, that file is skipped and the next examined
until a match is found or the end of tape is reached.
SEARCH SE This switch overrides all other switches. It gives you
more information than /LIST and suppresses any transfers.
Added to the /LIST information, you get the size of the
file in blocks and the date and time it was last written.
The information given can be further extended by the
switches /FULL, /TIME, /PROTECTION, /WRITER, /REFERENCED,
/DUMPED, /WORDS and /OFFSET. (The offset will always be
listed if nonzero for a particular file.) If a list term
is specified, all of the possible information is listed.
The output goes to the same place as with /LIST, with the
following variation: If the "list term" is omitted, the
listing goes to your terminal. If /QUIET is used with
this switch and no list term was specified, only the ppn
and the total size of each disk area are printed.
*SPOOL SP This is the same as /DSPOOL except that the /DELETE switch
is not used in spooling the file.
TIME TIM This switch implies /SEARCH, and causes the directory
listing to include the time as well as the date when the
file was last written.
TITLE TIT This causes a "title page" to be put out in large block
letters followed by a form feed. The title is of this
form:
FILNAM.EXT
PPN
TIME
DATE
The date and time are when the file was last written. For
non-directory devices, <device name>: is printed in place
of filnam.ext and ppn.
UFDPRO UF This switch implies /SEARCH but also causes the UFD
protection and the UFD's default file protection to be
printed for each PPN for which a header is listed. These
two protection codes are output on the PPN's header line
in the following form:
[PRJ,PRG] UFD PRO=405; DEF PRO=000
The /UFDPRO switch is implied by /FULL and by /PROTECTION
(in a DIRECTORY command or following /SEARCH). To get
just these protections typed out (without listing any
files), use DIRECTORY [PRJ,PRG]/Q/F/UF. Note that if the
PPN header is not printed, the UFD protection will not be
listed.
UIGNORE UI Ignore UFDs that are read protected from the user, e.g.,
in commands like DIRECTORY *.LST[*,*]. Without this
switch, COPY will issue a "protection failure" warning for
each such UFD that can't be read, and possibly require
confirmation before continuing.
WAIT WA This switch will automatically wait for a busy device
(e.g., XGP) without requiring confirmation by the user.
WORDS WO This switch implies /SEARCH and adds to the information
typed out the size of each file in words, or in K for
files bigger than 1K (1024 words).
WRITER WR This switch includes the PPN and job name of the last
writer in the directory listing for disk files. It
implies /SEARCH.
Monitor Commands
The following is a list of the monitor commands which use COPY and how they
work. The syntax is the same as for COPY.
COMMAND EFFECT
DELETE This deletes all the files specified by the source term, and
types the space reclaimed as with the /GTOTAL switch. If the
200 bit is on in the file protection key, you will be asked if
you really want to delete the file (/QUIET overrides this
feature). The destination term is interpreted as the list term.
The list term is therefore illegal.
DIRECTORYThis gives you all or part of the file information for the
source term(s) (or *.* if no source term is used). The
destination term is treated the same as for DELETE. For a more
flexible way of viewing the list of files in a directory, see
the DIRED program on page 12; DIRED allows sorting the directory
listing in various ways, whereas COPY's DIRECTORY command
presents the files in the order that they appear in the UFD.
RENAME This allows you to change the filename, extension, PPN, and
protection of a file. The format is newname←oldname. Use
/PROTECTION=nnn to change protection.
TRANSFER This copies files from one place to another and deletes the
source files.
TYPE This sets the default output device to your terminal.
XGPLIST This sets the default output device to the XGP.
A2.5 Examples
COPY DTA4:←*.*
This would cause all the files on your disk area to be written on DTA4.
COPY ←DTA4:*.*
This would cause all the files on DTA4 to be written on your disk area.
COPY <filnam.ext>/NONUMBERS
This would delete line numbers (if any) from the file indicated.
COPY [2,RPH]←*.*[1,RPH]
This would cause all the files on 1,RPH to be copied onto 2,RPH no matter who
you are logged in under (subject to file protection failure).
TYPE <filnam.ext>
This would cause the specified file to be listed on the terminal you are logged
in on.
TYPE <filnam.ext>(2)/NONUMBERS
This would cause page 2 of the specified file to be typed out without line
numbers.
DIR FOO←*.TXT[*,*]
This would cause the filnam.ext, ppn, size, etc. for all files in the world
with the extension TXT to be listed in the file FOO on your disk area.
COPY FOO←TTY:,FOO/ASCII
This would allow you to add text at the beginning of the file FOO (/ASCII is
mandatory).
RENAME FOO/PROTECTION=077
This would change the protection of the file FOO to 077 without doing a
transfer.
DIR[*,RPH]/QUIET
This will tell you the size of each of RPH's areas without printing the
filenames and other information.
COPY TEMP←↓$ED$09↓.TMP
This copies the file $ED$09.TMP into TEMP so that you can edit it. (These names
are created by SOS.)
DELETE @DEL
This would use the file DEL as a list of files to be deleted. This method is
very good for "cleaning" your area.
DIR FOO/WRITER
This would list the standard directory information for file FOO along with the
PPN and job name of the job that wrote the file.
RENAME [2,PRG]←*.*[1,PRG]
This would move all the files on [1,PRG] to the area [2,PRG], keeping individual
filenames intact. Renaming across PPNs like this is much faster than COPYing
the files, since RENAME just changes the filenames without having to copy all
the data.
A3 SPOOL
For printing files, there are several general purpose printers available to
system users. These include the line printer, the XGP, and the Dover. (As this
manual goes to press, it is expected that very soon there will be Canon printers
available too.) To control normal output to these printers, there is one
phantom job assigned to each such printer. These jobs are called spoolers, and
making a printing request is called spooling a file. Each spooler decides, on a
priority basis, which file will be printed next, the priority being based on the
size of the spooled file and how long it has been waiting. Spooling provides a
method of producing listings of files without the disadvantage of tying up a
user's job while waiting for (1) someone else's listing to finish and/or (2) the
user's own listing to be done. Spooling requests are recorded in temporary disk
files which are read and processed by the spoolers. The user makes, deletes, or
examines spooling requests with one of the commands shown below.
SPOOL request line printer listing of specified file(s)
XSPOOL request XGP listing of specified file(s)
DOVER request Dover printing of specified file(s)
UNSPOOL allow selective deletion of spooler requests
QSPOOL display spooler status and queues
As an example of spooling a file, the monitor command
XSPOOL MONCOM.UPD[S,DOC]
will cause the XGP spooler to list the file MONCOM.UPD[S,DOC] (which is the file
of updates to this manual).
Spooled listings are normally preceded by a title page used to make it easy to
separate different listings (see the /NOTITLE switch below, for suppressing the
title page). This title page includes the filename, the real name and
programmer name of the requestor, the current date and time, and the date and
time when the file was last written. (User names are read from the file
FACT.TXT[SPL,SYS]. The few project names are read from the file
XFACT.TXT[SPL,SYS].) In addition, each page printed usually bears a heading
line at the top showing the filename, date and time printed, and page number
(see the /NOHEADING switch below, for suppressing the headings).
In the discussion below, "SPOOL" is used to mean any one of the commands SPOOL,
XSPOOL, and DOVER, except as noted, and "spooler" means the corresponding system
phantom.
To have the spooler make a listing the user must tell the spooler what file(s)
to print. The easiest way to tell the spooler what to do is by using the
monitor command SPOOL (or XSPOOL or DOVER). This command consists of the word
SPOOL followed by the name(s) of the file(s) to be listed. File names are
separated by commas. Each file name may be followed by switches, explained
below.
Files to be spooled are specified in the conventional way, starting with an
optional device name, then the file name, the extension, and optionally a
project-programmer name. If no extension is specified, and the given file name
does not exist with no extension, then .LPT, .XGP, and .PRE are assumed for the
SPOOL, XSPOOL and DOVER commands respectively. If no device is specified,
device DSK is assumed; any device given (most often a UDP) must be available to
the spooler (in the case of a UDP, it must be ASSIGNed by someone else until the
spooling is finished). Most of the filehacks available in COPY can be used to
select files for the spooler; for example, SPOOL \MAIL:ME(1) will spool page one
of ME's mail file. See page 110 for a list of the filehacks; those that specify
more than one file (e.g., \OPTION) are not relevant to spooling.
An asterisk, *, may be used to allow matching of any file name, extension,
project name, or programmer name. (RPG, DMP, and REL files will not be matched
by * in the extension.) This feature can used in conjunction with the /ASK
switch (see below) to allow the user to select which of several files should be
printer.
Switches are allowed either preceding or following a filename. Switches that
precede a name are sticky and will be applied to subsequent names. A switch
consists of a slash, the switch name and, sometimes, a parameter, for example,
/REPEAT=5.
The following switches are available. Note that most switches occur in two
senses (e.g., /DELETE and /NODELETE). This allows an explicit switch in some
term to override an earlier sticky switch.
Switch(es) Action (of first switch, where a pair is given)
DELETE,NODELETE DELETE this file after printing. The file protection of
this file must be low enough so that the spooler can delete
it.
NONUMBER,NUMBER Omit SOS line numbers from the listing. "N" is an accepted
abbreviation for NONUMBER.
FORTRAN,NOFORTRANInterprets the first character of each line of the file as
a FORTRAN carriage control character.
HEADING,NOHEADINGPrint a page heading at the top of each page. "H" is
accepted as HEADING. HEADING is the default for all files,
except those with .LST extensions. The heading includes
date, time, filename, and page numbers.
TITLE,NOTITLE Precede the listing with a title page. TITLE is the
default for all files.
NARROW,NONARROW Center the title page to fit an 8.5 inch wide page (for
line printer listings only).
RECOPY,NOCOPY Copy the file to [SPL,SYS] and list the copy. This allows
the original file to be edited while the copy is being
printed. The copy will be deleted after being printed.
REPEAT=n Make n copies of the listing. (REPEAT is NOT sticky.)
EXTRA=n Insert n extra line feeds in the listing after every line
feed in the file. (EXTRA is NOT sticky and is not allowed
with Dover spoolings).
DUMP,NODUMP Octal listing. Data will be printed as octal full words.
(OCTAL is an equivalent switch.) This feaure is NOT
implemented for the Dover spooler.
NOFF,FF Translate each line feed in the file to a special character
which causes single spacing with no form-feed between pages
(suppresses the form-feed usually inserted after about 60
lines).
NOWARN,WARN Suppress "spooling done" typeout after listing.
ASK Ask the user which of the specified files should really be
spooled. For each file, SPOOL will type the filename and
wait for the user to answer with "Y" to spool the file or
"N" to skip it. This is useful with * filename terms.
HOLD=hhmm The listing will be held in the queue until the time
specified by hh hours, mm minutes. (24-hour time is
assumed.) If hhmm is prior to the current time, hhmm
tomorrow is assumed.
MODE=n Open the file in mode n (n is octal).
QSPOOL Type out the particular spooler's status and its queue
after entering the request.
Some additional switches are available for particular devices, for instance
margin switches can be used with the XGP and Dover. These will be explained
later.
File specifications may be read from an auxiliary file by including in the
command line the name of the auxiliary file preceded by @. This file may
include file names and switches.
Delayed Listing
Usually requests for spooled listings will be processed as rapidly as possible.
Under some circumstances this may not be desired. For example, a long listing
impacts the normal operation of the system by making the printer unavailable
during its duration. The spooler allows users to delay such listings until a
time of minimum loading (e.g., 0500) when the unavailability of the printer is
less likely to interfere with other users. To specify a delayed time of
printing, use the switch /HOLD=hhmm, where hhmm is interpreted as the 24-hour
time of day when the listing should actually be sent to the printer. In the
example below, 1730 will be interpreted as 5:30 PM.
Example:
SPOOL SYSTEM.LST[S,SYS]/HOLD=1730
If the time specified is before the current time of day, this is interpreted to
mean, "list the file tomorrow at the time specified." That is, if at 10PM you
give the command:
SPOOL BAZ.FAI/HOLD=400
then the listing will occur in six hours.
Page Selection
You may follow a file name by a list of ranges of pages that you want listed.
The list must be parenthesized. For example:
SPOOL FOO.SAI (1,7,5:8)
will cause page 1, page 7, and pages 5 through 8 inclusive to be listed. Page
ranges are never sticky.
In octal dump mode, such a range list is used to specify a word range to list,
rather than a page range.
Multiple Copies of a File
The REPEAT switch, /REPEAT=n, makes n (decimal) copies of the file(s) it is
applied to. When multiple copies are made on the line printer, no title pages
are printed for the second and subsequent consecutive copies.
A3.1 XSPOOL and DOVER Special Features
Since the XGP and the Dover have greater flexibility than the line printer, the
XSPOOL and DOVER commands can take more spool parameters than the SPOOL command.
The switches below are legal only in one or both of the XSPOOL and DOVER
commands. However, when spooling a Press file (.PRE) on the Dover, none of
these switches can be used, since Press files contain their own complete
formatting information. In some of these switches, a row or column parameter
must be given; on the XGP these rows and columns are measured at about 200 per
inch, and on the Dover these rows and columns are measured at 1000 per inch
(although actual Dover resolution is only 374 per inch).
FONT#n=f This is used to specify a font to be used in printing the file on
the XGP or Dover. n is a number from 0 to 127 decimal, but is only
relevant for XGP spoolings, since the Dover spooler cannot specify
multiple fonts except in PRESS files, which already contain the
complete font specifications. f is a font name; for XGP listings
it is a filename, whose default name, extension and PPN are
GACS25.FNT[XGP,SYS]; for Dover listings, f is a Dover font name,
optionally including the size at the end, and the default is SAIL8.
The XGP spooler will use the font named f as font n; if #n is
omitted, n=0 is assumed. See also XGP partial font loading below.
FSIZE=n (Dover only) Set the font size to n, where the default is 8.
ROTATE (Dover only) Rotate the listing 90 degrees counter-clockwise,
making the page be wider than it is long. This is useful for
printing files formatted for a line printer (i.e., that have very
long lines). When this switch is used, the defaults for the
listing become: FONT=SAIL8, NCHARS=132, LHEIGHT=115, NLINES=58,
TMARGIN=1070, LMARGIN=950, BMARGIN=850.
LMARGIN=n Set the left margin to column n, where column 0 is approximately
the left edge of the paper. The left margin is the column which
the carriage return character selects. On the XGP, with about 200
columns per inch, the default left margin is 200. On the Dover,
with about 1000 columns per inch, the default left margin is 1070.
RMARGIN=n (XGP only) Set the right margin to column n, with the default being
1650. If the XGP is going to write a character that exceeds this
margin, a new line will be started, unless NOWRAPAROUND mode is in
effect (see below).
NCHARS=n (Dover only) Set the maximum number of characters per line to n,
with the default being 95 characters per line. If more characters
than this appear on a line, then a new line is started after every
n characters.
TMARGIN=n Set the number of blank rows between the top edge of the page and
the first line of text. The default top margin is 200 on the XGP
and 1092 on the Dover.
BMARGIN=n Set the number of blank rows between the bottom of the text and the
bottom edge of the paper. The default bottom margin is 200 on the
XGP and 950 on the Dover. The XGP spooler interprets BMAR=0 to
mean no paper cutting.
PMARGIN=n (XGP only) Set the number of rows in the page body to n, the
default being 1800. Text is written inside this area. (The
spooler interprets PMAR=0 to mean that the end of a page body is
signalled only by a form feed in the file, for variable-length
pages. This is true only if BMAR≠0.)
LHEIGHT=n (Dover only) Set the line height (vertical distance per text line)
to n rows (with about 1000 per inch). The default height is 133.
NLINES=n (Dover only) Set the number of text lines per page to n. Use of
this switch implicitly sets LHEIGHT. The default number of lines
per page is 68.
XGP (XGP only) The first page of the file is taken as font and margin
commands, preceded by slashes as in the command line. Only the
special XGP spooler switches (the ones in this table) are allowed.
Carriage returns are ignored. If the first page of the file is an
E directory, the second page is used for the commands. The command
page is not printed. A file extension of .XGP also invokes this
feature.
NOXGP (XGP only) Turns off /XGP.
XLINE=n (XGP only) Set the minimum interline spacing to n rows, the default
being 4.
NTNODE=n (XGP only) Set the number of text nodes allocated by the monitor
(see below).
NVNODE=n (XGP only) Set the number of vector nodes allocated (see below).
WRAPAROUND (XGP only) Allow long lines of text to wrap around to the next line
upon reaching the right margin. This is the default, and as a
result this switch cannot appear in a /XGP file header.
NOWRAPAROUND (XGP only) Discard text that occurs on a line after the right
margin has been reached. This switch can definitely appear in a
/XGP file header.
PLIMIT=n (XGP only) Set the maximum expected pages of paper (at 11 inches
each) to be printed to n. This switch is for getting the XGP
spooler to make a more reasonable priority calculation for a file
being printed. When this switch is NOT used, the priority
calculation is based on the length of the entire file, even if only
a small part of the file is being printed. For instance, if you're
only spooling one page of a giant file, your request will get a
much bigger priority if you include /PLIMIT=1. If your spooling
exceeds the given page limit, however, the printing will be
terminated immediately.
Text nodes and vector nodes are units of core storage allocation used by the
monitor's XGP service routines. Generally, you need not worry about them, but
if you have trouble printing a complex document the allocation control switches
may be able to help you. See a system wizard to find out.
The /XGP switch, when present, turns off the usual default assumptions about
other switches; in particular, /HEADING is not assumed unless it is explicitly
used. Spooling a file with extension .XGP implies a default of /NONUMBER as
well as /XGP.
More XGP peculiarities:
If any FONT select switch specifies some font number other than 0, no /HEADING
switch will be assumed unless it is explicit.
Page headings will occur in font#0. Whatever font was in effect before the
heading line will be reinvoked before any further processing. The title page,
if present, will be made in font#0.
The title page will contain any page specifications and format-affecting
switches (e.g., /HEADING but not /REPEAT) which came from the XSPOOL command.
Partial font loading: A font select switch of the form /FONT#n=file=charss is
permitted in a /XGP file header to tell the system font compiler to load only
the characters in the string charss from this font. The string is terminated by
the first character which appears twice in a row (including null). The
terminating character is included in the ones to be loaded. This switch is
useful if a document needs just a few characters from many different fonts, and
the complete fonts would be too big for the amount of core storage available to
the font compiler. The monitor command XPART can be used to generate an /XGP
file with partial font loading (and/or only selected pages of text) from another
/XGP file; see the XPART documentation in the file XPART.DON[UP,DOC].
An additional switch, /USETI=n, is also allowed only inside a disk file when
/XGP is in effect. It indicates that no more switches are on the current page
(which is the first page of the file, or the second if there is an E directory),
but that more switches can be found starting at record number n (decimal) of the
file. No text in or after that record will be printed. The switch is meant for
one-pass document compilers which want to use the partial font loading feature
but don't know until after writing the output file what characters will be
needed.
The switch /END can be used to terminate the /XGP switches that are being read
from the file itself. The rest of the current page, up to the next formfeed, is
completely ignored. You (or a program) can use this to stick comments in this
part of the file.
Suspended XGP listings: The XGP spooler sometimes breaks a long listing into two
or more parts in order to let shorter listings through without their having to
wait until the long listing is completely finished. Thus it is not necessary
(or desirable) for users to break up long XGP spooler requests into pieces.
A listing being made with BMAR=0 (no paper cuts) will never be suspended. For
all other listings, the spooler uses the following rules to decide whether or
not to suspend the current listing:
The spooler only considers suspending a listing when a formfeed (pagemark) is
encountered in the input file. To avoid suspending a listing that was about to
finish anyway, the spooler will not consider breaking a listing that is within
two records of the end of the file.
When a formfeed is encountered with more than two records left in the file, the
spooler checks to see if the "guaranteed unbreakable" minimum amount of paper
has been output for the current listing. This minimum is currently 25
normal-size (11-inch) pages. Note that the spooler actually checks the amount
of paper spewed out, not the number of pages. If less than the minimum paper
has been output, then no break is considered and the listing continues.
If the minimum amount of paper has already been printed, the XGP spooler checks
to see if anyone is in the device-wait queue (DWQ) waiting for the XGP. If so,
the current listing is suspended and the spooler releases the XGP.
If no job is waiting for the XGP, the spooler checks to see if 40 formfeeds have
been output since the last time it checked the priorities of spooler requests.
(The spooler of course checks priorities before starting a listing.) If not,
the listing continues. If so, then the spooler re-checks the priorities of all
the XGP spooler requests. In making this check, the priority of the request in
progress is figured based on the amount of the input file that is left, not on
the total size of that file. If the current listing still has the top priority,
then it is continued, although a page or two of blank paper may have come out of
the XGP while the spooler was thinking. If the current listing no longer has
the highest priority, then it is suspended and the new top priority task is
started.
When a listing is suspended, the requestor's terminal will get a message and the
last page of XGP output will be a short piece of paper indicating that the
listing was suspended and giving the page number at which the suspension came.
When the listing is resumed, another terminal message is sent.
When the XGP stops working for some hardware reason (out of paper, KA-10 down,
etc.) the current listing is suspended; it will be resumed when the XGP is ready
again.
A3.2 The QSPOOL Command
The QSPOOL command starts the SPOOL program in a special way. QSPOOL reads the
directory of [SPL,SYS], interprets the contents of the spooler command files
there, and displays the queue of files to be printed by each spooler. It also
shows each spooler's current status. The QSPOOL command may be given without
logging in.
The commands QSPOOL/LPT, QSPOOL/XGP, and QSPOOL/DOVER will display spool
requests only for the indicated device.
The queue is based on a priority scheme. The priority of a spool request is
determined by:
(time waiting to print, in minutes + 1) / (file size in records)
However, this time waiting does not include time while the spooler is printing a
listing that was requested by the same user.
Requests are processed in the order of decreasing priority. (The priority of a
suspended XGP listing is based on the number of records remaining in the file,
rather than its total length.)
On a display, QSPOOL will display the queue status repeatedly (every 15 seconds)
for 3 minutes or until stopped by the user's typing RETURN. On a non-display,
QSPOOL just types the information once. The command QSPOOL/TYPE will type the
information once even if at a display.
The queue display updating that happens every 15 seconds will continue for about
3 minutes after the last command given before automatically stopping. Typing
BREAK I will make the updating continue for about 30 minutes, and typing ESCAPE
I will make it stop in 3 minutes.
While the queue(s) are being displayed, you can give any of these commands:
ALT Update the display immediately without waiting 15 seconds.
RETURN Terminate the displaying (exit if came from monitor cmd).
LINE Same as RETURN
αβE Same as RETURN
<switches>RETURN Select particular mode(s) and continue. One or more
switches can be included. When any switches are given
while displaying the queue(s), the default is to resume
outputting all the queues (hence the significance of the
/DISPLAY switch below). Also, the normal 15 second delay
is suppressed when any switches are given; the display will
be updated immediately (unless /TYPE was given). Here are
the available switches:
/DISPLAY Display the queues; given alone, this switch displays all
the queues.
/TYPE Type the queues; given alone, this switch types all the
queues.
/XGP Output only the XGP queue.
/DOVER Output only the Dover queue.
/LPT Output only the line printer queue.
/ALL Output the [SPL,SYS] command file name for each queue
entry.
Any switch may be abbreviated to just one letter after the slash, but giving an
illegal switch will terminate the display.
Note that it takes about three times as long to evaluate and display all three
queues as it does to handle just one. This means that the display will appear
sooner if you ask for only the one queue that you are really interested in,
e.g., with Q/D, Q/X, or Q/L (these are currently acceptable abbreviations).
A3.3 UNSPOOL Command
The UNSPOOL monitor command displays all the spooler requests that you (your
programmer name) have requested and allows you to delete any of them. If you
delete a request which hasn't been seen by the spooler, then nothing special
happens since the spooler is not yet aware of the command, so it won't be
missed. If it happens that the spooler is already printing a file you are
unspooling, then the listing in progress will be purged (aborted before
completion).
If you give the command UNSPOOL/ALL, or if you give the command REENTER after
UNSPOOL exits, then not only are you allowed to purge any spooling that is
either in progress or pending, but you also can change the spooler behavior in
the following ways:
1. You can cause the present listing to be purged.
2. You can cause the present listing to be started over.
3. You can cause the spooler to hold the queue (and release the device) before
starting the next file.
4. You can release the queue from the state induced by holding it.
5. You can cause the XGP spooler to consider suspending the current listing at
the next page mark, even if its guaranteed minimum page count has not been
met.
The commands UNSPOOL/LPT, UNSPOOL/XGP, and UNSPOOL/DOVER will allow and deleting
of spool requests only for the indicated device.
A4 MAIL
This appendix describes several programs that are useful for sending and
receiving messages, monitoring public discussion files, and scheduling delayed
program running. The main programs discused here are MAIL, RCV, CANCEL, CKMAIL
and CKSUM. See also E.ALS[UP,DOC] on the use of E in reading mail files and
sending messages; E is the primary program used to read messages.
A4.1 The MAIL program
The MAIL program is used to send messages to users and sometimes to arbitrary
disk files for special purposes. The program is invoked by one of several
monitor commands, depending on the function desired:
MAIL send a message to one or more message files
SEND send a message to the terminals of one or more users
GRIPE send a message complaining about a system problem
REMIND schedule a message to be sent at some later time
PLAN create a file describing how to find you when not logged in
EVENT send a message to all users about an event on a given date
BATCH schedule the execution of a command string at some later time
LATER schedule the execution of a given program at some later time
RETRY send any messages which were queued by earlier failing operations
NAME give a user's real name and tell if and where his mail is forwarded
The commands MAIL, SEND, and GRIPE may be given when not logged in, so that
people who are not authorized users of our system can use them to communicate
with us. A user who is not logged in will be asked for his name, which will be
included in the header of the message. However, users who are not logged in may
not use wildcard (send to all users) or network destinations.
The commands MAIL, SEND, and REMIND require a list of destinations (recipients
of the message). All of the commands except NAME, LATER, and RETRY require some
message text and also can be modified by the use of certain optional switches,
either applied globally (all destinations) or just to a particular destination.
The commands REMIND, PLAN, EVENT, and BATCH all require a date and/or time which
can be included by itself or in a global /DATE or /TIME switch. (Any date given
must appear before any time given, whether in switches or not. See the section
below on dates and times.)
GRIPE takes one or more single-word gripe topics, e.g., GRIPE MAIL to report a
problem with the MAIL program. This will be more fully explained on page 135.
NAME takes a programmer name and types the user's real name and forwarding
address (if any). See page 138.
LATER takes up to four specific arguments which describe the program to be run
and when it is to be run; these will be described on page 140.
RETRY takes no arguments at all; it merely looks for queued mail originating
from, or destined for, the current user and tries once again to send each such
message (this will be done automatically if RETRY is not used).
The normal command syntax includes all necessary information on one or more
lines without much prompting. There is an alternative format, called
hand-holding mode, in which each piece of information required is prompted for
separately. Hand-holding mode is more verbose and time-consuming to use, but
may be less confusing to new users. It is invoked by typing just the command of
interest without any arguments, and will be described in a separate section.
What follows here assumes that the normal syntax is being used.
Before explaining the complete range of command options, here are a few sample
commands:
SEND BH Want to have dinner?
This is a very simple example of a command with one destination and no option
switches. It types the message "Want to have dinner?" on BH's terminal if he is
logged in, along with a header indicating who sent the message. If BH is not
logged in, MAIL asks if the message should be mailed instead of sent.
MAIL/DIST @NL Language group meeting Tuesday at 3pm.
This command mails the message "Language group ..." to the mail files of the
users listed in the file NL.DIS or NL or NL.DIS[P,DOC] (the [P,DOC] file
directory contains lists of users by project group). The first file in that
list which exists is used. The message will include the standard header
indicating who sent the message and when, and also (because of the /DIST switch)
a line indicating to whom the message is being sent.
REMIND/DATE=10-*-* . Rent due tomorrow
This command reminds the user who isssued the command (because of the "."
destination meaning self) to pay the rent on the tenth day of each month of
every year. The reminder is both mailed and sent each time, and expires after
50 times. (These are default conditions modifiable by switches.)
A4.2 Command Format
The command format for all MAIL commands except NAME, LATER, and RETRY is shown
below. (The formats for the NAME, LATER, and RETRY commands are explained in
the sections on those commands beginning on page 138.) Here is the usual command
format:
<command & global switches> <destinations & local switches> <message>
The <destinations & local switches> part only applies to the MAIL, SEND, and
REMIND commands. Destinations and destination lists will be described in the
next section. There are no destinations for the BATCH command. EVENT and PLAN
have implicit destinations, and GRIPE uses gripe topics as destinations.
The message text can be provided in any of three ways: (1) a one-line message
can be included after the destinations on the command line and ended with <CR>;
(2) if no message specification is given on the command line (or the same line
as the last destination for a multi-line command), MAIL asks for a message (any
number of lines) to be entered from the terminal, ending with the end-of-file
character (<CONTROL><META><LF> from a display terminal or local PTY, <control>Z
otherwise); or (3) if the notation
@file.ext[prj,prg]
is used on the command line after the last destination, the message text is
taken from the specified file. If no extension is typed, the extension .TXT is
tried first, and then a blank extension. To force the use of a filename with no
extension, type the dot but no extension, for example:
@file.[prj,prg]
The file may contain an E directory or SOS line numbers, which will not be
included in the message.
If something not starting with "@" follows the destination list on the command
line, it is taken as the message text. This makes single-line messages more
convenient to enter. If you start to enter a single-line message, and decide
you need more than one line after all, end the command line with <LF> instead of
<CR> and you will be allowed to continue the message on later lines.
If the command line specifies that the text comes from a file, and the command
line ends with <LF> instead of <CR>, MAIL allows the user to append text from
the terminal. That is, a command like
MAIL FOO @FILE<LF>
reads the text from the file, echos the file to the terminal as it reads, then
says "Continue message followed by ..." (with the right EOF character for your
terminal), then allows further typein. This can be used, for example, to mail
someone a copy of another message and append your own comments. As explained
below, a <BS> (backspace) at the beginning of a line deletes the previous
<CR><LF> and allows editing the previous line, even if the previous line came
from the file.
While typing the text of a multi-line message (not message text on the command
line itself) you can type <CONTROL><META>I to insert a file at that point. MAIL
asks for the filename, reads the file and echos it, then asks you to continue
typing.
When entering a message, the usual line editing facilities are available. In
addition, if the <BS> key is typed when the input line is empty (i.e., at the
beginning of a new line), the last line typed is loaded into the line editor (on
a display) or input buffer (on a non-display) and the cursor is positioned at
the end of that line. The text of that line is deleted from the accumulated
message. The effect is that a carriage return can be deleted by <BS> like an
ordinary character. It is possible to back up another line by doing another
<BS> after clearing the newly reloaded line. This procedure destroys the lines
that followed the one to which you back up, and the backup is only possible for
a small (about 30) number of lines.
When entering a message from a display, a better facility is available for
correcting errors in the command or in the message more than one line before the
current line. Typing <CONTROL><META>E at the end of a line of message text will
cause an E-format file called MAIL$E.TMP to be written on your login disk area
(not alias) with the command, switches, and destination list that you gave on
page 2, and the message text up to the <CONTROL><META>E on page 3. Then E is
run automatically on this file to allow you to edit the text and/or command. E
will start up positioned at the beginning of the message text on page 3, but you
can modify the command or destinations by editing page 2 (page 1 will be the E
directory page). When you are finished editing the message and command, type to
E the command <CONTROL>XRUN to restart the MAIL program automatically and send
the message as edited. The MAIL$E.TMP file is automatically deleted after the
message is sent. Note: if you accidentally or purposefully exit from E without
saying <CONTROL>XRUN, you can still send the message from MAIL$E.TMP by simply
editing that file with E (using /R if you don't need to further edit the message
or command) and then giving E the command <CONTROL>XRSYS MAIL, which will run
MAIL to send the message and delete the file.
The character <CONTROL><META>E cannot be typed on the MAIL command line itself,
because control characters are not allowed in monitor commands. Therefore, on
the command line only, the character <ALT> will start running E.
The character <ALT> cannot appear in a message (because it is a line editor
activator and would confuse some mail-reading programs). If an <ALT> is seen in
the message text as input (other than on the monitor command line), it is
changed into a dollar sign ($). Also, the character <FORM> cannot appear in a
message (because it would mess up the E-format of mail files). If a <FORM> is
seen in the message text as input, it is changed into an exclamation point (!).
Finally, the character <BS> cannot be part of a message text. This is not a
problem if the message is entered from the terminal, because <BS> is interpreted
as a line editor command, but if a <BS> is seen in a message text file, it is
changed into a lambda (λ).
If the /SUBJECT or /NOMSG switch is used to include a subject line in the
message header, the subject is taken from the first text line entered: for a
file, the first line of the file is the subject; what would otherwise be a
single-line message is taken as the subject line for a multi-line message to
follow. If no message is provided on the command line, you are prompted for a
subject line and then for the message text (except that /NOMSG implies that
there is no message text).
A4.3 Destinations and Destination Lists
The commands MAIL, SEND, and REMIND require one or more recipients, or
destinations, specified in a list called the destination list. The destinations
should be separated by commas. The list may extend over more than one line if
the lines before the last end with comma. (Any characters from a semicolon to
the following linefeed are ignored.) The following types of destinations may be
used:
prg programmer name of local user
. yourself
* notice for all users, giving (SEND only) reminder about ARPA* & LOCAL*
** notice for all users, but (SEND only) suppresses reminder
ARPA* (SEND only) all users logged in via any network
LOCAL* (SEND only) all users logged in on local DD or III displays
name real name (or leading substring) of local user
% host sticky network host to be used for following names
name % host user at another network host
name@host user at another network host
#fil.ext[pj,pg] (MAIL only) arbitrary file to receive message
TTYn (SEND only) terminal to receive message
n (SEND only) job number to receive message
@fil.ext[pj,pg] file containing destination list
The form "prg" in the above list must be one to three letters and digits, the
first of which is a letter (upper and lower case letters are equivalent). The
forms "name" in the above list must consist of either any number of letters,
digits, and hyphens, starting with a letter, or of arbitrary characters enclosed
in quotation marks ("...") or downarrows (↓...↓); however, the "name" in
"name % host" can include dots as well as letters, digits and hyphens, since
this represents a user name at another network host (e.g., ADMIN.ME%SCORE). For
the form "name@host" to be accepted, there must be no spaces between the "name"
and the "@"; this is to avoid confusion with the "@fil.ext[pj,pg]" destination
form. In the SEND command, the TTYn form may optionally be followed by a colon.
Network hosts are specified by host name (letters, digits, and hyphens starting
with a letter) or by decimal host number. If the host name is used it can be
abbreviated by enough characters to identify it uniquely. Many hosts have short
nicknames recognized by the network programs on WAITS. Host names for either
the ARPAnet or the SUNet (Ethernet)* can be given. Mail to other networks, for
instance networks connected to other ARPAnet hosts, can sometimes be
accomplished by using a special destination name with the name of the ARPA host;
e.g., MAIL "SoAndSo@MIT-XX" %MIT-AI will mail a note to SoAndSo at MIT-XX (on
the MIT CHAOS net) by sending the message first to MIT-AI. MAIL currently
doesn't accept host names for hosts other than those on the ARPAnet or SUNet,
although this may be fixed sometime after this manual goes to press.
A host may be specified for a single destination, using the "name%host"
notation, or a sticky host may be specified by just "%host". A sticky host will
apply (until another sticky host is specified) to all following destinations
that start with a letter or a quote character and which do not have a host
specification themselves. A host name of SU-AI (or SAIL) will override a sticky
host but will not actually send the message via the network. A sticky host name
given outside an indirect file does not apply to destinations inside the file,
and a sticky host name in such a file applies only to destinations named
immediately in that file.
More information about network mail will be given in a later section.
In the #file construction, if no extension is given the default extension
of .MSG is used. To mail to a file with no extension, you must type the
filename in the form "#file." with no extension after the dot.
In the @file construction, if no extension is given the default extension
of .DIS (distribution list) is tried first. If that file does not exist, then
the null extension is tried next (both of these on your current alias disk area
unless you gave an explicit PPN). If neither of these exists, then the
extension and disk area .DIS[P,DOC] is tried (unless you gave an explicit PPN).
The [P,DOC] directory contains several distribution lists derived from the
laboratory personnel directory. For example,
SEND @VB Time for volleyball!
will send that message to all known volleyball players as listed in the file
VB.DIS[P,DOC]. Distribution list files may contain E directories or SOS line
numbers. Only the first page (second page if in E format) is read. Everything
on that page will be interpreted as destinations even if not properly separated
by commas. (The semicolon format for comments will work.)
For the MAIL command, if there is a file called OUTGO.MSG in your login (not
alias) directory, it is automatically included as a destination for the message.
This provides a simple and automatic method for saving a copy of each message
you MAIL to anyone. The /-OUTGO switch can be used to prevent sending a copy to
your OUTGO.MSG file.
MAIL cannot be sent to local users who do not have file directories. However,
if you must MAIL a message to a programmer name that has no file directories,
you can do
MAIL #" prg".MSG[2,2]
to mail explicitly to the message file of programmer name "prg" (prg should be
right-justified in six quoted spaces).
The check for syntax validity and existence of local users is made as soon as
the destination list is read. If some but not all of the destinations are
valid, MAIL asks whether or not it should proceed using the valid ones. If you
want to correct a mistake in a destination (or in a switch or in some part of
the message already typed) before sending the message, answer no to the query
and then use the monitor command REENTER, as explained on page 142.
For the SEND command with a multi-line message (so the destination list is read
before the message has been entered), a warning message is given if any
programmer name recipient is not logged in. This warning does not require
reconfirmation before the command is executed.
For people who want to send mail to people listed in a file designed for use by
SNDMSG at a TENEX site, which requires a different syntax, the /ARPA switch can
be used to cause distribution list files to be parsed differently, including the
use of "@" to indicate a network host name. Obviously nesting of distribution
list files is not possible within such a file. See the description of the /ARPA
switch below for more details.
------
* As we go to press, MAIL's current Ethernet host name parsing is somewhat
limited, but this will probably be fixed very soon. If MAIL fails to understand
an Ethernet host name you give, try a different pseudonym for the same host.
A4.4 Message Formats
Messages are usually sent preceded with a special header which tells who sent
the message and when it was sent. This header takes three forms: one for
messages being typed out on terminals (SEND command), another for local (SU-AI)
mail files, and a third for messages sent out over the network. The header may
be followed by an optional distribution list (explained below). After the
distribution list (if present), the message text is sent followed by a blank
line (unless the message already ends with a blank line). SEND leaves off the
extra blank line when typing the message on terminals.
The header used for local files starts with a partial sign to facilitate
detection of the beginning of each message by various message editing programs.
To ensure that trouble is not caused when a partial sign actually occurs in a
message, any partial sign that occurs as the first character in any line of a
message is indented by one space, whether or not the message is going only to
local files.
Here are examples of the first two header formats:
;; Message from ME at TTY6 1735 Records
∂06-Jan-82 1735 ME Records
The SEND header (first above) contains the sender's programmer name, terminal
number, the 24-hour time of sending, and then the subject (if any). If the
sender is at a Data Disc terminal, the header contains the number of the
responsible physical terminal as well as the TTY number.
The local file header (second above) contains a partial sign followed by the
date and the time of day, then the sender's programmer name and the subject (if
any). The local file header can be suppressed by use of the /-HEADER switch
(see the section on switches below). However, this switch is not recommended
for general use when mailing to users' message files since it causes the message
to be sent without any identification about who sent it or when it was sent; in
fact, it effectively causes the message to be appended to some other message in
the file. This switch is useful, however, when mailing text to a special file
which is simply to contain message text.
In both the SEND header and the local file header, if the sender was logged in
via a network at the time of sending, the phrase "via host" will follow the
sender's programmer name, where "host" is the name of the host from which the
sender was connected to WAITS. The name preceding the "via ..." is,
nevertheless, a WAITS programmer name.
If the sender is not logged in, his programmer name is 100 and he is asked to
supply his real name, which is included in the header.
If the message was sent to all users by a SEND * command, a "to *" phrase is
added to the header line to make it look like this:
;;Message to * from ME at TTY6 1735 Records
Finally, if the message if being sent as a reminder (see the REMIND command),
then the programmer name in the header will be followed by an asterisk (*) as in
these examples:
;; Message from ME* at TTY6 1735 Records
∂06-Jan-82 1735 ME* Records
Now, here is a sample header for messages sent out over the network:
Date: 06 Jan 1982 1735-PST
From: Martin Frost <ME at SU-AI>
Subject: Records
To: rmf at MIT-ML
The network header contains the date and time, the sender's real name as well as
his programmer name, the subject (if any), and the distribution list (list of
recipients of the message, starting "To:").
The distribution list can be omitted from network mail by use of the /NODIST
switch (see the section on switches below) and can be included in local messages
(MAIL or SEND) by use of the /DIST switch. Note that /NODIST applies only to
network messages and /DIST only to local messages. For messages MAILed to two
or more destinations, a global /DIST switch is assumed unless a global /-DIST
switch is given. The distribution list may use more than one line if lots of
destinations were specified. Also, some destinations may be listed on lines
beginning "CC:" instead of "To:"; such destinations are considered secondary
recipients of the message and are specified by use of the /CC switch with the
first such destination.
Normally, if a distribution list file was used to specify the recipients of the
message, a distribution list included with the message will contain only the
name of that file, not the actual recipients listed in it, to avoid very long
distribution lists. The /LIST switch (see the section on switches below) will
list in the message the individual recipients named in the file.
A4.5 Message File Formats
When mail is sent to a file which already exists, the beginning of the file is
read to see if it contains an E directory. If so, the message is added at the
end of the file preceded by a <FORM> so that the message will be on a new page.
The directory is not updated to reflect this new page, but the <FORM> will be at
a record boundary, so that when the file is next edited with E, the directory
can be updated without reformatting the file. If the file does not already
contain an E directory, the message is added at the beginning of the file
without any <FORM>. In this case, record boundaries are not necessarily
preserved. The /APPEND switch will cause the message to be added at the end of
the file along with a <FORM> as if there had been a directory. The /-HEADER
switch which omits the local mail header also omits the <FORM> which would have
just preceded the header in E format files.
When a message is sent to a file which did not formerly exist, the file is
created with an initial E directory so that subsequent messages will be added at
the end of the file. The switch /-E can be used to omit this directory normally
inserted for a new file. However, this switch and its inverse /E will be
ignored for user message files (*.MSG[2,2]) and for user plan files
(*.PLN[2,2]). New user message files always get an E directory; user plan files
never do.
The command MAIL #LOGOUT can be used to send a message to the file LOGOUT.MSG,
which will be typed and deleted automatically when you log out (and have no
other jobs still logged in). This file is created /-E automatically.
A4.6 Command Switches
Various switches can be specified in the command line to modify the operation of
the MAIL program. Some apply only globally; these may appear either just after
the command name or after an individual destination. Other switches can be
applied either globally (by appearing just after the command name) or to a
particular destination (by appearing just after that destination). A switch
applied to a particular destination overrides a global switch. Switches may
appear at the beginning of a distribution list file, in which case they apply
globally to all destinations within that file. Switches appearing with the
@file destination format override file-global switches at the beginning of the
file.
A switch name may be abbreviated by enough characters to identify the switch
uniquely. All switches are available in positive and negative senses (e.g.,
/LIST and /-LIST) except for the following switches which are not available in
the negative sense: /CC, /DATE, /TIME, /COUNT, and /ARPA; also, the switch
/-OUTGO is available only in the negative sense. The default value for most
switches with a negative sense is the negative sense; the /HEADER, /E, and
/QUEUE switches are the primary exceptions, but in addition the /SUBJECT and
/DIST switches can be implied by the command.
Here are the available switches:
Switch Meaning of positive switch sense
/NOMAIL (SEND only) Do not mail the message to a destination programmer
name if the user is not logged in. Suppresses the question about
such mailing.
/YESMAIL (SEND only) Do mail the message to a destination programmer name if
the user is not logged in. Suppresses the question about such
mailing.
/MAIL (SEND only) Mail the message to a destination programmer name as
well as sending even if the user is logged in. Suppresses the
question about mailing of SEND messages which would be asked if a
destination programmer name were not logged in. If /MAIL is used
globally (SEND/MAIL), then the command will record the message in
your OUTGO.MSG file, if it exists. (Note that this switch has a
different meaning for the REMIND command--see below.)
/MAIL (REMIND only) Do not send the reminder to the destination
programmer name when the time comes, only mail it. Normally
reminders are both mailed and sent. (Note that this switch has a
different meaning for the SEND command--see above.)
/SEND (REMIND only) Do not mail the reminder to the destination
programmer name when the time comes, only send it. Normally
reminders are both mailed and sent.
/DIST Include the list of destinations in the text of the message for
local recipients (see message format in a previous section). A
global /DIST is implied by the MAIL command when two or more
destinations are given unless a global /-DIST is specified.
Compare /NODIST below.
/NODIST Do not include the list of destinations in the text of the message
for network recipients (see message format in a previous section).
This switch is not the inverse of /DIST!
/NO This is equivalent to /NOMAIL for the SEND command and to /NODIST
for the MAIL command, so that /N can be used to abbreviate the
appropriate switch.
/CC List this destination and all after it as secondary (CC) recipients
(see message format in a previous section). This switch implies
/DIST unless a global /-DIST is given.
/SUBJECT Include a subject line in the message. The effect of this switch
is always global. /SUBJECT is implied by the MAIL and GRIPE
commands unless some message text or the name of an indirect
message file or the /-SUBJECT switch appears on the command line.
However, typing just <CR> to the "Subject:" prompt will omit the
subject from the message. Subjects are useful in local mail files
because the first line of each page (usually the header line of a
message) appears on the directory page in an E-format file, and for
local files the subject is included in the header line and thus in
the directory.
/NOMSG This switch is used for a message with no text other than the
subject. There must be a subject, and /SUBJECT is implied. Any
message text appearing on the command line is taken as the subject
rather than as the text. If no text appears on the command line,
MAIL prompts for a subject but not for a text. The intent is to
allow a message which fits on one line of a local mail file, so
that the text appears in the recipient's E directory.
/WHERE (MAIL and SEND only) Type the wholine of each job that is logged in
under a programmer name included in the destinations.
/QUEUE Queue network mail for later delivery without first trying to send
it immediately. The first attempt (by the remind phantom) to send
such queued mail will happen right away. This switch defaults on,
but affects only the MAIL command; network SENDs are done while you
wait.
/APPEND (MAIL only) Put the message at the end of the file instead of the
beginning even if it has no directory. A <FORM> will precede the
message (unless /-HEADER was given).
/LIST List the destinations specified within a distribution list file as
well as the file itself in any distribution list included with the
message. For REMIND, /LIST implies /EXPAND.
/HEADER Include the header line in messages mailed to local files. See
message formats in a previous section. Unlike most switches, the
default for this switch is on.
/E Include an E directory if creating a new message file. The default
for this switch, like that for /HEADER, is on. See the section
above on message file formats.
/DATE (REMIND, PLAN, EVENT, and BATCH only) This switch is used in the
form /DATE=<date> and sets either (1) the delivery date for a
reminder, (2) the expiration date for a plan, (3) the occurrence
date of an event, or (4) the execution date for a batched command
sequence. Reminders, events, and batch executions can also be
given a time (see /TIME switch below), but any date must be
specified before any time is. For the <date> formats accepted, see
the section below on dates and times.
/TIME (REMIND, EVENT, and BATCH only) This switch is used in the form
/TIME=<time> and sets either (1) the delivery time for a reminder,
(2) the occurrence time of an event, or (3) the execution time for
a batched command sequence. Reminders and batched executions can
also be given a date, and events must be given a date; see the
/DATE switch above. If /DATE and /TIME are both used, /DATE must
come first. For the <time> formats accepted, see the section below
on dates and times.
/COUNT (REMIND and BATCH only) This switch is used in the form
/COUNT=<number> and sets the expiration count for a reminder or a
batched command sequence. This count is only relevant if the
command contains a wildcard date. See the section below on dates
and times.
/EXPAND (REMIND only) This switch applies only to destinations of the form
@file. It causes such a distribution list file to be expanded now
instead of when the reminder is actually sent. This means that
there will actually be a separately stored reminder for each
destination now contained in the distribution list file rather than
one reminder that actually references the file when the reminder is
being sent. This switch applies only to the file itself (not to
any @file destinations within the file), unless the switch is given
globally or file-globally, in which case it propagates downward.
/-EXPAND implies /-LIST.
/ARPA This switch may only be used with a destination of the form @file
or as a file-global switch in such a distribution list file. It
changes the syntax of the destination processor so that the
character "@" precedes a network host name instead of a
distribution list file name, and all SIXBIT characters except
space, comma, colon, quote ("), and at-sign (@) are allowed in
names without using quotes. A name ending with a colon
(distribution list name for SNDMSG) is ignored. The switch is
intended for files from systems like TENEX with less sophisticated
mail programs.
/-OUTGO This switch is meaningful only in the negative sense. It prevents
mailing the message to your OUTGO.MSG file.
/REPLYTO This switch causes a "Reply-To" field to be inserted in the message
header. Mail programs at many hosts, as well as the REPLY macro in
EINIT.CMD[1,3], recognize this field as overriding the sender's
name when determining where to send a reply. The form of the
switch is /REPLYTO"arbitrary text". If the arbitrary text includes
quotes, use the alternate form /REPLYTO↓arbitrary text with
quotes↓; if the text is just a different WAITS user address, you
can use /REPLYTO=name.
/IMPTYP This switch causes MAIL to type out all network control commands
that are sent or received in the process of sending the mail. This
applies only to network mail that is being attempted immediately
(not to queued mail) and is for the benefit of wizards attempting
to debug network mail.
/XHEADB This switch is for use by wizards debugging network mail headers.
It causes all destinations to really mean "." (the sender) even
though the message header will be generated normally and will
indicate all the recipients as named.
/NETDBG This switch is for use by wizards debugging network mail. It
causes mail sent to someone at the sender's own WAITS host to be
sent through the network if the host is named explicitly. Normally
local mail is not sent through the network.
A4.7 Dates and Times
The commands REMIND, PLAN, EVENT, BATCH, and LATER all accept dates and (except
for PLAN) times. The date and/or time given for one of these commands specifies
when a particular thing should happen: REMIND causes a reminder message to be
mailed and/or sent to one or more users at a given instant; PLAN creates a plan
file for the user giving the command and specifies the date on which the plan
file should automatically be deleted; EVENT puts out a system message announcing
an event of general interest which will take place at the specified time and
date; BATCH causes a sequence of commands to be executed at the specified time
and date; and LATER causes a given program to be run at the specified time and
date. For all of these commands except LATER, there are two ways to provide the
date and time information.
The less confusing manner of giving dates and times is to use one or both of the
switches /DATE=date and /TIME=time after the command name (if both are used,
/DATE must precede /TIME). These switches may only occur immediately after the
command name. (Switches are not permitted with the LATER command, which takes a
fixed one-line format that will be explained on page 140. Dates and times in
the LATER command must use the non-switch format.) If neither switch is used in
a command that needs a date or time, then a date and/or a time will be expected
after the destination list (which is only present for REMIND) and before the
message text.
Dates may be given in any of the following formats (whether in the switch form
or not):
4/28/75 28-APR-75 APR 28, 75
4/28/1975 28-APR-1975 APR 28, 1975
4/28 28-APR APR 28
4/28/* 28-APR-* APR 28, *
*/28/* 28-*-* +3
WEDNESDAY WED W
WEDNESDAY* WED* W*
(Visitors from other countries please note that the slash format is
month/day/year, and not day/month/year!)
If a specific month and day are given but no year, the current year will be used
unless the date has already passed, in which case next year is used. Today's
date is considered as already having passed except in the EVENT command. Months
and days of the week may be indicated by as many letters as are required to
identify the name uniquely. For days of the week, the one-letter abbreviations
M T W R F S D are provided. The format "+3" is used to indicate a date of 3
days from today. The asterisks represent wildcard dates which are explained in
the section below on wildcard dates and expiration counts.
Times may be given in any of the following formats (whether in the switch form
or not):
1423 223pm 223p 02:23p
14:23 2:23PM 2:23P 02:23PM
0223 223am 223a 223
02:23 2:23AM 2:23A 2:23
2 2AM 2PM 14
+2:23 +2: +:23 +14:
2* 2AM* 2:23* 2A*
If an explicit AM or PM is given, it must follow the time number with no
intervening spaces! This requirement is necessary to distinguish the AM or PM
from the possible beginning of the message text or of a destination name. Times
with three or four digits and no colon normally imply AM if less than 1200 and
PM otherwise (the allowable range is 0000-2359); it is possible to specify AM or
PM explicitly, however, if the number is in the range 0100-1259. If no explicit
date is given in the command, times with one or two digits, or with a colon, and
in the 1:00-12:59 range without an explicit AM or PM, will represent the nearest
such 12-hour time which has not yet passed (which might be this morning, this
afternoon, or tomorrow morning). If a date is given as well as a time, times in
the 0:00-11:59 range will normally be considered AM and 12:00-23:59 will be
considered PM as for the four-digit times. Note: A time of 12:00am is midnight,
and 12:00pm is noon; the mnemonic is that 12:00 is a minute before 12:01.
If a time is given but no date, today's date is used unless the given time has
already passed, in which case tomorrow's date is used. If a date is given but
no time, the time used is midnight at the beginning of the given date.
The relative time format (e.g., +2:23) specifies the length of time before the
command is to be executed (in this example, 2 hours and 23 minutes); this format
may only be used if no date is given and, except in the switch form, must
contain a colon so that +2 days can be distinguished from +2: hours.
A time followed by an asterisk represents the given time and a wildcard date;
see the section below on wildcard dates and expiration counts.
A4.8 Wildcard Dates and Expiration Counts
As demonstrated in the example dates and times above, an asterisk (*) can be
used as a wildcard in place of the month or year, or following a day of the week
or a time. Such dates and times cause the command to be executed repeatedly
until exhaustion of the expiration count, which is explained below. (Wildcard
dates are not permitted in the PLAN and EVENT commands.) An asterisk used in
place of the month will cause the command to be repeated once every month, and
an asterisk used in place of the year will cause yearly repetition; asterisks
used for both the month and the year will cause monthly repetition every year on
the given day of the month. An asterisk following a day of the week will cause
weekly repetition on the given day of the week. An asterisk following a time
will cause daily repetition at the given time; in this format no date can be
given.
If * is used for the month but not for the year, the command will expire at the
end of the specfied year, or the current calendar year if none is specified.
When a wildcard date is used, the command is repeated until exhaustion of the
expiration count. The expiration count can be set explicitly by using the
/COUNT=n switch (global only) or by following a non-switch-format date/time with
#n, where n is a decimal number. If no expiration count is given, the default
of 50 is used. A count of 0 or ∞ will prevent the command from expiring unless
it is explicitly cancelled by the user.
A4.9 Mail to Other Network Hosts
Mail can be sent to users of other computer systems connected to the ARPA
network or the SUNet (Ethernet). To send network mail, you must tell the MAIL
program the name of the recipient, as understood by the other host, and the name
of the host. Each host has an official name, a string of letters, digits, and
hyphens. For example, our host name is SU-AI. Hosts may also have unofficial
nicknames. Either the official name or a nickname can be used to identify a
host; you need only type enough characters to identify the host uniquely. For
example, we have the nickname SAIL which can (as of this writing) be abbreviated
SAI. Each host also has a number; you can type a decimal host number instead of
a name. (Ethernet host-name scanning has not yet been put into final form as
this edition goes to press. Therefore, not all reasonable names of Ethernet
hosts may be recognized by MAIL.) The format for a network destination is
name % host
where "name" is the recipient's name at the host and "host" is the host name or
number. The recipient name can contain upper and lower case letters, digits,
dots, and hyphens; if any other characters are required the name must be
enclosed in quotation marks ("...") or downarrows (↓...↓). The name must also
be quoted if it does not start with a letter. Some hosts may consider the case
of letters significant in their user names.
To send a message to several users at the same host, it is possible to specify a
sticky host with a pseudo-destination of the form
% host
Thus, the command
MAIL FEINLER%BBNB,%AI KLH,TK,MINSKY,BH%SAIL,PAPERT
will mail the message to these recipients:
FEINLER at host BBN-TENEXB
KLH at host MIT-AI
TK at host MIT-AI
MINSKY at host MIT-AI
BH at host SU-AI
PAPERT at host MIT-AI
Of course, mail to SU-AI is not actually sent via the network! The sticky host
specifier "%AI" was not followed by a comma in the example above; the comma is
optional following sticky hosts since the use of a sticky host implies that at
least one destination will follow.
Not all network hosts are servers; that is, some hosts can originate network
connections but do not accept connections originated from another host. MAIL
will try to deliver mail to any given host, whether it is known as a server or
not; however, if a host doesn't have a mail server, then mail addressed there
will not get through but will eventually be returned to the sender.
If MAIL does not recognize a host name that you think it should, consult a
system programmer. MAIL will always accept hosts specified by number.
The process of delivering network mail is rather slow; therefore, the default
action is to queue the message for delivery by the remind phantom job rather
than to mail it directly from your own job. The switch /-QUEUE will cause
immediate mailing. This switch is automatically assumed for very long messages
(more than about 20,000 characters). A network SEND command is also done
directly from your own job. Note: normally the first attempt to deliver the
mail will be made immediately by the remind phantom, but if the system is very
crowded there may be no job slots available for the phantom until later.
If you specify /-QUEUE, MAIL will notify you of the progress of your message.
Network mail may not be delivered successfully on the first try, because the
other host or the network communications equipment may be down. Therefore, the
result of a network mail attempt from your own job is reported with one of three
messages:
USER at HOST -- ok
USER at HOST -- refused
USER at HOST -- queued
The first message means that the mail was sent and acknowledged by the other
host. The second means that the network connection was established but the
other host rejected the mail, for example, because it did not recognize the
recipient as a user of that system. Usually the other host will send back a
message explaining why the mail was refused, which the MAIL program types out.
The third message means that the network connection could not be made or was
interrupted. The message is queued like a reminder and is automatically retried
at three-hour intervals for three days. (The first repeat attempt is made 15
minutes after the original failure.) You can use the RETRY command (see the
section on the RETRY command) to retry your queued mail manually. You will be
notified via MAIL and SEND of an unfavorable disposition of queued mail; the
possibilities are
Mail to USER at HOST -- ok
Mail to USER at HOST -- refused
Mail to USER at HOST -- expired
The last of these means that the three-day limit ran out without a successful
connection. You will get the "ok" message only if the remote host sends back a
nonstandard reply message; normally you should simply assume that the message
will be delivered unless you are notfied otherwise. You can use the CANCEL
command (page 145) to see if a message is still in the queue, or to delete it if
you no longer want it sent. If the message is not sent successfully, the
notification you receive will contain the text of your message, so you can
direct it elsewhere if necessary.
The header format for network mail is different from that used for local mail.
The section of this document on message formats explains the network header. In
particular, the distribution list (list of recipients of the message) is by
default included in network mail but not local mail. The /NODIST switch will
eliminate the list from network mail.
If you often communicate with users at other hosts, you may want to send mail to
a group of people listed in a file which was prepared elsewhere. To make this
easier, the switch /ARPA applied to a distribution-file destination causes the
file to be scanned using the syntax of the SNDMSG program on TENEX systems.
Specifically:
The character "@" is used instead of "%" to indicate network host names.
Any character may be used in a recipient name except space, carriage
return, linefeed, tab, quote, colon, comma, and at-sign without quoting
the name. Note in particular that semicolon is a valid recipient name
character.
A recipient name ending with colon (distribution list name) is ignored
completely.
There is a network protocol for implementing the SEND command to a remote host.
However, most hosts do not implement it. Most notably, it works to WAITS
systems, the ITS systems at MIT, and the TENEX systems at SRI. Certain other
hosts also accept this protocol, but not very many. The MAIL program will
attempt it to any host, but it generally won't work except to the
above-mentioned hosts. When a SEND fails to a remote host for any reason, the
message is never queued for later delivery--its delivery is simply aborted.
A message sent to a remote destination by SEND or SEND/NOMAIL, but not by
SEND/YESMAIL or SEND/MAIL, will have a special short header instead of the
normal network message header. The short header looks like this:
ME at SU-AI 1/6/82 17:35:16
(Note that the switches can apply to a single destination, rather than globally
as shown here.) If you use /YESMAIL or /MAIL, and the remote host does not
recognize the network SEND protocol, MAIL will try again using the standard MAIL
protocol.
A4.10 The MAIL Command
The MAIL command is used to send a message to one or more users, but can also be
used to write a message in an arbitrary disk file. This command takes a list of
destinations which determines where the message is to go. See the section above
on destination lists.
Mail sent to a user will be seen when he next reads his message file, but a note
saying that mail has arrived is typed out on the terminal of each destination
user who is logged in at the time the mail is delivered. You can edit your
message file with E by giving the monitor command ETV ∂ (or ETV \MAIL).
A notice can be mailed to the system message file NOTICE.TXT[2,2] via the MAIL *
command. Users see the system messages when they log in. Since a system
message may only be relevant for a short time, an expiration date can be
specified for such a notice. To do this, use the /DATE=<date> switch; the
message will be deleted at the midnight that begins the given date, and
therefore the notice will last be seen on the previous day. The date must not
be wild; that is, it cannot contain the asterisk (*) wildcard specifier. System
messages specified without an expiration date will be deleted after 14 days.
(The expiration facility is implemented by including the expiration date as its
octal DAYCNT number in the message header. A program run every night deletes
expired notices.) See also the EVENT command for putting notices about events
in the system message file.
To put a message into the system bulletin board file BBOARD.TXT[2,2], use the
command MAIL BBOARD. The recommended way of reading this file is with CKSUM
(see page 146) and E.
Sometimes mail cannot be delivered to a given user right away. In this case,
the mail system queues the message for later delivery. Attempts to deliver
queued local mail will be made every ten minutes for four hours, with the first
such attempt occurring about 2 minutes after the original failure. Queued
network mail is retried every 3 hours for three days, starting 15 minutes after
the original failure. After 24 delivery failures, the sender is notified via
the mail system of the eventual outcome of his mail attempt. Mail will have to
be queued if the destination user is located at another network host and that
host is down, or if the destination user is local but is currently reading his
mail file. There is a limit on the size of a message to be queued (currently
about 40,000 characters). Queued mail is handled automatically by the mail
system and the sender need never take any further action. However, the sender
can unqueue any of his outgoing messages that have been queued; the monitor
command CANCEL allows selective deletion of these queued mail requests (see page
145). Also, the sender can cause MAIL to retry sending his outgoing queued mail
immediately by giving the RETRY command (see page 139).
Mail for local users is normally kept in files in the [2,2] directory. These
files must have 000 protection so that anyone can write into them, since the
MAIL command is not specially privileged. However, it is possible to create a
mail file which is protected against other users. If there is a file called
MSG.MSG[1,PRG] then mail to PRG will go to that file instead of the usual [2,2]
file; if the file is protected, so that the MAIL command cannot write the
message, then the request will be queued for delivery by the remind phantom,
which does have the necessary privileges. The phantom will use its privilege to
override file protection only for a file named MSG.MSG, so you cannot queue mail
to an arbitrary protected file.
The LOGOUT program will type and delete a file in your directory called
LOGOUT.MSG if you have no other jobs logged in. This mechanism can be used to
send yourself a reminder to be seen when you leave:
MAIL #LOGOUT Get some ice cream on the way home tonight.
The MAIL program provides for mail forwarding, primarily intended for users
whose primary mailbox is on another network host. The feature also allows for
"pseudo-mailboxes" which are forwarded to one or more real destinations.
First we consider the forwarding of mail for a programmer name. As an example,
programmer name GFF forwards to Geoff%SRI-CSL.
MAIL GFF This is a test.
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C
In this case, the forwarding entry has been set up to notify the user that
forwarding is taking place. This is optional; usually it will be done for real
programmers and not for pseudo-mailboxes. The use of a user's human name rather
than programmer name works with forwarding:
MAIL GOODFELLOW message text
GFF is the ID for user Geoff Goodfellow
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C
Forwarding happens only for MAIL, not SEND!
SEND GFF Test message
Exit
↑C
But if the SEND command causes mailing, the mail is forwarded:
SEND GFF Test message
GFF not logged in, type Y to mail. Y
Forwarding GFF to Geoff%SRI-CSL
Exit
↑C
(A SEND to a not-logged-in user which turns to MAIL to a user whose mail is
forwarded to the network, will try a network SEND and then network MAIL if
necessary.)
Another possible use for forwarding is to affect the processing of one's mail.
For example, if user ABC always logs in remotely and reads his mail with RCV
rather than E, ABC might be forwarded to ABC/-E to tell MAIL not to make an E
directory when creating a new message file for that user. This brings up the
question of switches applied to forwardees. Most such switches are applied to
all of the corresponding real destinations, e.g., MAIL GFF/DIST will be treated
like MAIL Geoff%SRI-CSL/DIST. Also, for forwardees only, /-DIST implies
/NODIST, since the mailer may not know whether the actual recipient is local (in
which case /-DIST is applicable) or at a remote host (/NODIST). A few switches,
which affect the format of local files, are ignored for forwardees, e.g.,
MAIL GFF/-E ignores the switch, because the mailer doesn't really know where the
mail is going. These switches are rarely used anyway; don't worry about it.
It is possible for a person to be known to the system only for the purpose of
mail forwarding, i.e., to have a forwarding entry but no file directories. Such
a person is a mail-only destination; suppose that GIO is forwarded to
WIEDERHOLD%SUMEX and has no file directories on WAITS:
SEND GIO Hello.
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations:
Exit
↑C
(In this case, nothing will happen even if you type Y because the only
destination is a mail-only one, and mailing was not specified.)
MAIL GIO Hello
Forwarding GIO to Wiederhold%SUMEX
Exit
↑C
MAIL to this destination works straightforwardly, to coin a phrase. There are
some other possibilities:
SEND/MAIL GIO text
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations: Y
Forwarding GIO to Wiederhold%SUMEX
Exit
↑C
Since the command asks for both SEND and MAIL (/MAIL), it does have something to
do despite nobody to send to. But you are given the chance to abort, since
saying SEND/MAIL might mean that you expected it to be able to send also. The
command SEND/YESMAIL does not act like SEND/MAIL, but like SEND:
SEND/Y GIO text of message
Mail-only destination GIO will be ignored for SEND.
Type Y to continue, using valid destinations: Y
Exit
↑C
The pseudo-mailbox capability is useful mainly for incoming network mail, since
local users can easily use the simpler @FILE distribution list facility. For
example, there is a large mailing list called HEADER-PEOPLE at MIT which
includes several SU-AI users. When anything is mailed to that list, MIT must
set up several separate network connections to SU-AI, one for each recipient,
each of which starts up a separate MAIL job. This can be made more efficient by
creating a pseudo-mailbox SAIL-HEADER-PEOPLE here, containing all the SU-AI
people in HEADER-PEOPLE, and replacing them with one entry for this new mailbox.
Pseudo-mailboxes are always mail-only destinations, i.e.,
SEND SAIL-HEADER-PEOPLE won't work.
The pseudo-mailbox name must be entered completely; there is no partial name
recognition as for human users. Case of letters is ignored, however.
Incoming network mail will be accepted for any destination listed in the
forwarding file; the remote sender will be notified about the forwarding if a
local mailer would be. The network SEND protocol does NOT accept forwarding,
even in the case of SEND/MAIL (XMAS command in FTP). For the network SEND
protocol, it is just as if forwarding didn't exist.
Reminders may not be sent to pseudo-mailboxes. If a reminder is sent to a
programmer name for which forwarding is in effect, the programmer name is given
to the REMIND phantom as is; when the reminder is actually delivered, the
message will be sent to the actual programmer name and mailed to the specified
forwarding addresses, as in the SEND/MAIL command.
If you want to establish forwarding for yourself, or set up a pseudo-mailbox,
use the command MAIL FORWARD with a message describing what you want.
A4.11 The SEND Command
The SEND command is used to have a message typed out on one or more terminals.
This is usually for the purpose of sending a brief message to the terminals of
selected users so that they will see it immediately. The message is preceded by
a header telling who sent the message and when; see the section above on message
formats. This command takes a list of destinations which determines where the
message is to go. See the section above on destination lists.
A message can be sent to all logged in users via the SEND * command. The
message will be typed out on the terminal of every logged in user. This command
will remind you of the alternative forms, ARPA* and LOCAL* (explained below), in
case you didn't really want to send the message to everybody. If you do want to
send it to everybody, you can say SEND ** (two stars instead of one), in which
case the reminder about ARPA* and LOCAL* will be omitted.
To send only to people logged in locally at Data Disc and III terminals, you can
use the command SEND LOCAL*.
Also, the command SEND ARPA* will send a message to all users who are logged in
on WAITS via a network.
The SEND command also accepts decimal job numbers as destinations, or terminal
names in the form TTYn.
A user can prevent messages from being sent to his terminal by using the TTY GAG
command. In this case, the person trying to send the message will be notified.
Note that a user may be logged in at more than one terminal, and may have
received the message even if one terminal was gagged; in this case, a reassuring
message is typed to let you know that the recipient got your message on at least
one terminal. If the message is not successfully sent to the recipient at any
terminal, then you will be offered the chance to have the message MAILed
instead. The /WHERE switch will notify the sender of all recipient terminals,
successful as well as unsuccessful. A SEND can fail even if the terminal is not
gagged, e.g., if it is holding output. This also causes notification. You will
also be notified, even if the message is sent, if the recipient terminal is a
display whose page printer geometry is nonstandard and might cause the message
to be lost because the page printer area is too small to hold it. However, if
the currently selected piece of paper is nonstandard, but piece of paper number
0 is standard in its geometry, the warning will not be given, since messages are
sent to the display's piece of paper 0 as well as the currently selected piece
of paper.
There is a network protocol for implementing the SEND command to a remote host.
However, most hosts do not implement it. Most notably, it works to WAITS
systems, the ITS systems at MIT, and the TENEX systems at SRI. Certain other
hosts also accept this protocol, but not very many. The MAIL program will
attempt it to any host, but it generally won't work except to the
above-mentioned hosts. When a SEND fails to a remote host for any reason, the
message is never queued for later delivery--its delivery is simply aborted.
A4.12 The REMIND Command
The REMIND command allows the delivery of a message to be delayed until a
particular date and time, and/or to be repeated periodically. This command
requires a date and/or time, which are interpreted as explained above in the
section on dates and times.
Reminders are often sent to oneself rather than to another user. The character
"." (period) as a destination means your own login programmer name. Also, if
the first thing after the REMIND command (and global switches) is a digit, it is
taken as the beginning of a date or time, and your programmer name will be used
as an implicit destination:
REMIND 21-JUN KINKS CONCERT TONIGHT
Reminders are normally both mailed and sent at the specified date and time.
However, either of the switches /MAIL and /SEND can be used with the REMIND
command to cause the reminder to be only mailed or only sent. Nevertheless, if
a repeated reminder is being sent for the last time because its expiration count
has run out, it is always mailed even if /SEND was used in the command.
When a repeated reminder's expiration count runs out, a warning message to that
effect is included in the text of the last reminder.
To selectively delete reminder requests, use the monitor command CANCEL (see
page 145).
A4.13 The GRIPE Command
Complaints, compliments, or criticisms about any aspects of the system can be
entered by use of the GRIPE command. The MAIL system tries to send gripes
directly to the correct person for handling the particular gripe. If there is
no such person for a specific gripe, the gripe will go into the miscellaneous
gripes file, which is regularly read by various people. The format of the GRIPE
command is similar to that of the MAIL command, except that in place of the one
or more mail destinations, the user gives one or more gripe topics (separated by
commas) which determine where the message will be sent. Each gripe topic should
be a single word. Note that a gripe topic is not the same as, and does not
replace, the subject line which may also be given. As in the MAIL command, the
entire GRIPE command can be put on one line, e.g.,
GRIPE MAIL,E How come the αXMAIL command in E doesn't do such and such?
If you aren't sure what topic to use, you can say GRIPE * which will send the
message to the general gripes file. Also, if any topic you give is not
recognized as a gripe topic, your gripe will go to the general file anyway. The
command GRIPE ? will list the known gripe topics. To send a gripe that is
already written up in a file, you can say GRIPE topic @PPSAV.TMP<return>. The
command GRIPE with no arguments enters a hand-holding dialog comparable to that
for a MAIL command with no arguments. The general gripes file can be examined
and edited with the E editor by giving the monitor command ETV \GRIPES
(currently abbreviatable as ET\G).
A4.14 The EVENT Command
Messages of interest to everyone can be sent to the system message file by use
of the command MAIL *. However, for a message about an event occurring on a
particular day, a more useful facility is provided by the EVENT command, which,
like MAIL *, enters the message in the system message file NOTICE.TXT[2,2], but
which does so several times: first on the day the EVENT command is given, then
three days before the event, then again on the day before the event, and finally
on the day of the event. The EVENT command takes an explicit date and optional
time in the formats explained in the section on dates and times. EVENT will
then list the message given prefixed by a special line of the form:
Event of DAY DD-MON-YY at HH:MMxm
where DAY is the day of the week the event will occur on, DD-MON-YY is the day,
month, and year of the event's date, HH:MM is the event's time, if given, and xm
is either "am" or "pm" for the time. Thus, the date and time need not be
included in the message text itself.
Three days before the event, the day before the event, and again on the day of
the event, the event notice will be deleted and re-entered in the notice file so
that users will see it again on those days. It is finally deleted at the
midnight that ends the day of the event. If the event is on a Monday, the
notice is re-entered on the preceding Friday, Saturday, Sunday, and the Monday
of the event. If the event is on a Sunday, the notice is re-entered on Friday,
Saturday, and the Sunday of the event. Events on other days are re-entered
three days before the event, the day before the event, and the day of the event.
(The re-entering of upcoming events is implemented by including more than one
expiration date in DAYCNT format in the message header.)
If you want to change the text in an event notice, you can edit the system
messages file with ETV \NOTICE or RCV * and then update the message text or the
time of the event. However, if the date of the event is wrong, you should
delete the notice (with the editor) and make a new one (with EVENT) because the
octal dates in the header determine what days the message will be seen, and the
header should not be edited.
A4.15 The PLAN Command
The PLAN command is used to create or delete a file describing your whereabouts,
office schedule, or whatever, to be read by users who give the FINGER command to
find you when you are not logged in. The PLAN command writes a plan file called
" PRG".PLN[2,2], where PRG is your programmer name. Any previous plan file is
replaced with a new one containing only the new message you give. If you enter
a null plan, your plan file is deleted. The plan applies to your login
programmer name.
The PLAN command requires an expiration date (but no time) as explained in the
section on dates and times. Your plan file will be deleted at the midnight that
begins the expiration date. (Plan file deletion is implemented by entering a
LATER request (see page 140) to run the program DELPLN, which will delete your
plan file. You can selectively delete this LATER request by using the monitor
command CANCEL--see page 145).
Your plan file can be referenced with the COPY or E programs by using the \PLN
filehack. For instance, the monitor command TYPE \PLN will type out your plan
file, and DELETE \PLN will delete it. Also, the COPY/E message-file specifier,
partial-sign (∂), can be used to reference your own or someone else's plan file:
TYPE ∂.PLN will type out your own plan file and TYPE ∂ME.PLN will type out the
plan file belonging to programmer name ME.
A4.16 The NAME Command
The NAME command is used to find out, for a given programmer name, (1) the
user's real name, (2) the forwarding address (if any) for mail to that user, and
(3) if the given user has no directories. Thus one thing this command is good
for is telling if a particular programmer name is complete unused, for instance,
when deciding on a programmer name for a new user.
A4.17 The RETRY Command
The RETRY command is used to retry all queued mail immediately. It takes no
arguments at all in the command line. RETRY searches the remind queue for
queued mail (not reminders) sent by or to your login programmer name and tries
to send the mail. (This will be done automatically without using the command,
but the command is provided for impatient mailers.) Please do not type <call>
or ↑C after giving this command, or you may lose a queued message.
To retry only incoming messages (to you), use RETRY/IN. To retry only outgoing
messages (from you), use RETRY/OUT.
A4.18 The LATER Command
The REMIND command, in essence, allows the execution of a MAIL or SEND command
to be delayed to a specified time. The LATER command generalizes this delayed
execution to allow an arbitrary program (dump file) to be run at a later time.
The command format is:
LATER dumpfile core datetime count
The LATER command does not accept switches and requires all of its arguments to
be on the command line. If the proper syntax is not followed, a message is
typed explaining the proper syntax and nothing else is done.
The defaults for the program file to be executed are device DSK, extension .DMP,
and your alias PPN. If a device is explicitly specified, it must be DSK or SYS.
No check is made when the command is given to ensure that the specified file
exists or is a valid program dump file.
The optional core argument can be used to control the core size and starting
address used to run the program. If this argument is not used, the program will
be run in as much core as is needed to fit it, and will be started at its normal
starting address. The core argument can be in any of these formats:
<nP> <+m> <-m> <nP,+m> <nP,-m> <+m,nP> <-m,nP>
The angle brackets are actually to be typed. The nP subargument specifies the
number of 512-word pages of core to be assigned to the program; n is a decimal
integer. The +m or -m subargument is a starting address offset, that is, m will
be added to or subtracted from the program's normal start address. Note: m is
an octal integer. The core size may also be given in 1024-word blocks by saying
nK instead of nP. One K is equal to two pages.
The date and/or time must be given in the non-switch format as explained in the
section on dates and times. If both a date and a time are given, the date must
appear first.
The optional count argument specifies the number of times the program is to be
run and is ignored unless a wildcard date is used. If no explicit count is
given when a wildcard date is used, the default count of 50 will be assumed.
The format for the count field in the LATER command is
#n
where n is a decimal integer. A count of #0 or #∞ will cause the count never to
run out.
When a program specified by a LATER command is actually run, it will have your
login PPN as its login and alias PPNs. The only privilege it will have will be
the Local User Privilege (LUP). Also, it is run as a phantom job--if it is
stopped because of an error, the job is killed.
Certain accumulators (ACs) are set up when the program is started to communicate
information from the remind phantom to your program:
AC Contents
1 filename of program dump file (same as job's name)
2 extension of program dump file
3 PPN of program dump file--[1,3] if device SYS was specified
4 -1 if this LATER request will not be run again, else 0
The program can only be run if a job slot is available at the time for which it
is scheduled. If the remind phantom is unable to run the program because no job
slots are available, it does not try again later (unless, of course, the date
and time specify repetition). If the system is so crowded that job slots are in
short supply, users who are present in the flesh get priority over LATER
requests. This is rarely a problem except for weekday afternoons. (If there is
no job slot for the remind phantom itself, it will try to run your request once,
as soon as it is run itself.)
LATER requests can be selectively deleted by using the monitor command CANCEL
(see page 145).
A4.19 The BATCH Command
Sometimes you may want to delay the execution of one or more monitor commands.
To allow this, the BATCH command accepts a command string and enters a request
to run a program which enters the commands through a pseudo-teletype (PTY). The
message given with the BATCH command is taken to be the command or sequence of
commands which is to be typed to the PTY. The only switches permitted are
/DATE, /TIME, /COUNT, /TLIMIT, /NOW, and /DO. The /COUNT switch specifies the
number of times the command sequence is to be executed and is ignored unless
there is a wildcard date. The /TLIMIT switch (the name /LIMIT is equivlent) is
used to specify the number of CPU-minutes the batch job will be allowed to run.
The /NOW switch causes BATCH to execute the command sequence as soon as you have
finished entering it instead of later; in this case no date or time must be
given. The /DO switch causes certain character conversion to be done when
entering the commands, as in the DO program and as explained below.
Character Effect in /DO mode
RETURN ignored
LINE ignored
↔ translated to RETURN followed by LINE
↓ translated to LINE
≠ translated to ALT
λ translated to deferred CALL (one ↑C)
VT adds CONTROL bit to following character
α adds CONTROL bit to following character
FORM adds META bit to following character
β adds META bit to following character
⊗ translated to ESC
⊗- translated to BREAK
≡ quote the following character (no translation)
! invert state checking for terminal input wait
Note that the characters | and ? and ! are not treated the same by DO and
BATCH/DO. The first two of these (|?) being special only in DO, and the third
(!) being special only in BATCH/DO. (Other different interpretations may also
exist between the two programs.)
The BATCH/DO special character exclamation point (!) inverts a flag saying
whether or not to wait for the PTY job to be ready for input before typing in
commands. Normally, BATCH will not send characters from your batch command file
to the PTY job until that job is waiting for terminal input or for a monitor
command. That way, the typing of commands is synchronized with the running of
the program. However, this synchronization does not work for a few programs,
most notably FTP, which do not read terminal input in the normal way and
therefore are never in terminal input wait. Here is a sample command file using
the new feature:
FTP AI↔!
GET FOO.BAR←MUMBLE;FOO BAR↔
BYE↔
!SEND . FTP DONE↔
The GET and BYE commands are sent to the PTY job immediately after the first
exclamation point is seen by BATCH, but the SEND monitor command is not sent to
the PTY until FTP exits and the PTY job is waiting for a monitor command.
Note 1: In the above example, the first ! must be on the first line, right after
the ↔, because the actual carriage return ending that line would (even though
not actually sent to the PTY) cause a delay after the FTP command otherwise.
Note 2: If you put enough characters between exclamations points to fill up the
PTY input buffer, no more characters will be sent until there is room. If the
PTY job never reads any of the characters, then both jobs will wait forever.
Note 3: If you actually want to send a ! to the PTY, you must use ≡! in the
command file. (Note that all of this applies only to /DO mode.)
If the /NOW switch is not used in the BATCH command, BATCH writes a file on your
alias disk area called BATn.DMP (n is a number chosen to make the name unique)
and enters a LATER request for the running of that program. The BATn program
types the desired commands into a pseudo-teletype (PTY) when it is run. The
LATER request starts the BATn program at one more than its normal start address;
if it is started normally (e.g., RUN BATn), it simply types out the commands
stored in it, so you can find out which BATCH program is which if you enter more
than one. When the BATn program is started by the LATER request, it writes a
file called BATn.LOG on your login disk area with a log of the commands and
typed output. The BATn.DMP file is deleted when the request is being run for
the last time.
If BATCH/NOW is used, no BATn.DMP file is written. The MAIL program itself
executes the command sequence through a PTY as soon as you have entered the
whole command sequence. In this case, the log file is called BATCH.LOG and is
written in your alias directory.
BATCH requests can be deleted selectively by using the monitor command CANCEL
(see page 145). If you delete a BATCH request with CANCEL, the BATn.DMP file
will not have been deleted; you must delete this file separately.
The BATCH command has a time limit feature, to ameliorate the problem of runaway
batch jobs. The feature is controlled by the /LIMIT or /TLIMIT switch (the two
names are equivalent) in the form
/TLIMIT=mins or /TLIMIT=hrs:mins
The switch is given with other batch switches, right after the command name.
The form /TLIMIT=∞ may be used for an infinite limit. The default time limit is
one hour for jobs submitted for later execution, and is infinite for jobs run
immediately with the /NOW switch. (Presumably the latter case implies that the
user is watching the job run and can interrupt it himself if necessary.)
The limit applies to the job's runtime (CPU time), not realtime. The BATCH
controller takes clock interrupts every two (real) minutes to check the
controlled job's runtime, so the time limit may in fact be slightly exceeded
before the job is stopped. If the job runs over its time limit, it is logged
out immediately; the log file will end with a line saying
? BATCH: time limit exceeded.
The BATCH command has many deficiencies when considered as a full batch
processing facility. There is no way to control the commands issued on the
basis of past output, no provision for aborting a command sequence if an error
occurs, no provision for mounting tapes or collecting listings. The command is
not intended as a real batch processing system, but merely as a convenience for
delaying the execution of simple commands.
A4.20 The REENTER Error Recovery Facility
The MAIL program remembers all of its input after execution, and can be made to
repeat the command with or without modifications to the command, switches,
destinations, and message. To invoke this facility, type REENTER to the
monitor.
To use this feature while typing in the message text, you can type CALL and
REENTER, but any text still in the line editor buffer or the terminal input
buffer when you type CALL will be lost. Unless the system is very heavily
loaded, the problem of losing text from the terminal input buffer should not
come up, but be sure to type <CR> to activate any text in the line editor before
typing CALL.
Two different modes of REENTER operation are provided. If the command and
destination list were all typed on one line of input from a display, that line
is loaded into the terminal's line editor and can be edited and re-activated.
In this case, the program forgets all about the previous command and starts from
scratch when the edited command is seen. The text of a single-line message will
be included in the reloaded line; no message text will be loaded for a
multi-line message, but the old text is remembered and if the new command does
not contain a message or a pointer to a message file, the old text will be
re-used. Note: the subject line is considered part of the text, and the state
of the /SUBJECT switch may not be changed if the old text is re-used in this
way.
The second mode of repeating a command is used if the destination list was given
on more than one line or from a non-display. In this case, the command and
destination list are typed and you are asked if you want to keep the old
destinations. Whether you answer yes or no, the command name and global
switches are loaded into your line editor (displays only) and new destinations
can be added on the command line. Finally, if no message text appears in the
re-edited command, the old message is used as in the first mode. (Note: in this
mode, only valid destinations are remembered from the old destination list; in
the first mode what is remembered is the actual string of characters you typed.)
If the old text is re-used, in either mode, before sending the message the MAIL
program asks if the user wants to edit the command or the message text with E.
(Editing with E is allowed whether or not the user is on a display, although of
course it's easier to do from a display. SOS editing is not available because
SOS does not use the same SNAIL-startup conventions as E.) In this case, a
MAIL$E.TXT file is written and E is run as in the <CONTROL><META>E case--return
to the MAIL program is done via the <CONTROL>XRUN command.
A4.21 Hand-Holding Mode
If a command (other than NAME, LATER or RETRY) is given with no arguments other
than optional global switches, the MAIL program will use an alternate syntax
called hand-holding mode which is more verbose but less confusing to an
inexperienced user. In this mode, MAIL will prompt separately for each piece of
information appropriate to the given command; the possible prompts include
"To" destinations
"CC" destinations
Date and time
Expiration count
Subject
Message text
One possibly important difference between this and the normal syntax is that the
subject line is always entered separately from the body of the message, even if
the latter comes from a file.
Each prompt may be answered by a line containing just the character "?" to see a
message explaining the format of the required information for that prompt.
A REENTER command following the use of this format will be treated the same as
one following a multi-line destination list in the normal format.
A4.22 Interfacing to MAIL from Other Programs
The MAIL program can be run from another program using the SWAP UUO. A special
facility is provided for providing MAIL with the required arguments via the ACs
which are preserved by the SWAP UUO. To do this, start SYS:MAIL.DMP at one less
than its normal starting address. The message text (including subject line, if
desired) must first be written in a disk file, or a TMPCOR file if the MAIL
program is to be run in the same job as the swapping program. MAIL will, if
desired, SWAP back to the originating program (or any other program). The ACs
should be set up this way:
0-5 SWAP UUO arguments for return after MAIL if desired:
0 device
1 filename
2 ext,,mode bits (see UUO manual)
3 core,,starting address increment
4 file PPN
5 login PPN if starting new job
6-16 MAIL arguments:
6 destination PPN or file (see below)
7 file extension if required
10 file PPN if required
11 message text file name
12 message text file extension
13 unused
14 message text file PPN
15 date and time for REMIND (see below)
16 flags (see below)
17 is the SWAP AC and is not preserved in return after MAIL.
The flags in 16 are:
400000,,0 not used
200000,,0 /-E
100000,,0 /NODIST for network mail
40000,,0 /LIST
20000,,0 /SEND
10000,,0 /-HEADER
4000,,0 /-QUEUE
2000,,0 /APPEND
1000,,0 /DIST for local mail
400,,0 /WHERE
200,,0 /SUBJECT
100,,0 /MAIL
40,,0 /YESMAIL
20,,0 /NOMAIL
10,,0 /EXPAND
4,,0 command is REMIND
2,,0 command is MAIL
1,,0 command is SEND
770000 not used
4000 /-OUTGO
2000 read destinations from named file (ACs 6-10)
1000 return via SWAP when done
400 text input is from TMPCOR file
200 delete input text file when done
100 send to job (binary number in AC 6)
40 send to TTY (SIXBIT name in AC 6)
20 destination is * or ARPA* (AC 6 ignored)
10 mail to explicitly named file (ACs 6-10)
4 don't use this bit (/CC)
2 /ARPA (2000 bit must also be on)
1 if SEND, send to ARPA* (20 bit must also be on)
if MAIL, delete old contents of file
(for PLAN, see below)
Nothing is guaranteed about the results of setting inconsistent or irrelevant
combinations of flags, e.g., /EXPAND for a command other than REMIND. Note that
the /MAIL switch has two different meanings for the SEND command and the REMIND
command, but is the same bit in either case. Bits which are currently unused
should be zero.
If the 400 bit in AC 16 is on, the left half of AC 11 is taken as the TMPCOR
file name; the TMPCOR file PPN is the alias PPN of the MAIL job. The 200 bit in
AC 16 will delete either a DSK file or a TMPCOR file.
The usual case is sending a message to a programmer name. For this case, AC 6
should contain zero in the left half and the sixbit programmer name
right-justified in the right half. Do not use "." for your own programmer name
(use the programmer name explicitly) nor "*" for a wildcard destination (use 20
bit in AC 16).
Mail can be sent to any file (as in the #file destination format) by setting the
0,,10 bit in AC 16 and specifying the filename in ACs 6-10. More than one
destination, or a recipient at another network host, must be specified by using
an indirect file as in the @file destination format; set the 0,,2000 bit in
AC 16 and specify the file with the destination list in ACs 6-10.
Any files used (except the TMPCOR message file) must be on device DSK. No
default extensions will be used; specify the desired extension explicitly. (The
right half of an extension word must be 0.) A zero file PPN uses the job's
alias PPN as usual.
Exactly one of the 7,,0 bits should be on in AC 16 to specify the command to be
carried out. The effect of the PLAN command is achieved by specifying a MAIL
command with the delete-old-text bit and explicit file destination (2,,11 in
AC 16) and " prg.PLN[2,2]" as the destination filename in ACs 6-10.
The date and time in AC 15 is in the format:
BYTE (4)MONTH (5)DAY (6)YEAR (3)DAY-OF-WEEK (6)HRS,MINS,FLAGS
The flags are used for special formats:
0,,1 absolute date, DAYCNT in left half
0,,2 date is tomorrow (lh is zero)
0,,4 every day reminder (lh is zero)
Otherwise, zero in the left half means today's date, a nonzero number in the
7,,0 bits is an every-week reminder (1=Wed, 7=Tues), and anything else is an
every-month or every-year reminder with at least one of the month and year
fields zero. Month 1 is January, day 1 is the first of the month, and year 1 is
1965. The HRS field is hours past midnight (0-23) and the MINS field minutes
past the hour (0-59). An absolute date (no wild fields) must be in DAYCNT form.
If the SWAP technique is inappropriate, it is also possible to queue MAIL
requests. This facility was designed for the FTP server but can be used by
other programs. Write a file called <anything>.FTP[RMD,SYS] which contains, in
text form, a MAIL command and destination list on the first page, and the
message text on the second page. (This is the format of the MAIL$E.TXT file
used for editing messages with E.) When the remind phantom is next run, it will
try to start a MAIL job which will execute the command and delete the file.
The normal SNAIL startup procedure (starting MAIL at one more than its normal
start address) is used by E both to return to MAIL after you have used E to edit
your input text file and in response to the MAIL command in E. This entry is
not normally used except by E.
A4.23 The CANCEL Command
The monitor command CANCEL will run the CANCEL program which will list, and
allow selective deletion of, REMIND requests from or to you, BATCH and LATER
requests by you, and queued mail from you. This program can also be used to
list these requests without asking whether you want to delete them: after any
request is listed, type the letter L in answer to the deletion question and any
remaining requests will be listed without interruption. Type N to keep a
request and to go on to the next one. Typing Y to a message deletion question
will cause the message to be deleted and mailed back to you (for editing and
re-use). Typing F will delete the request but will not mail it back to you.
Typing a decimal number to the deletion question will cause CANCEL to keep that
request and to keep and skip over the given number of subsequent requests, just
showing a header line for each request skipped. Since the CANCEL program has to
share the use of the reminder queue files with the system remind phantom job,
there will sometimes be a delay in the listing of reminders. An appropriate
message is typed in this case.
A4.24 CKMAIL and CKSUM
The CKMAIL command can be used to find out if you or someone else has new mail.
If this command is given without an argument, then it looks for new mail for the
logged in user giving the command. To find out if someone else has new mail,
follow the command with the programmer name of interest, e.g., CK ME ("CK" is
currently a valid abbreviation for this command). CKMAIL will look first for
the "standard" user mail file, often called just "∂", and if that doesn't exist,
then it will look for the special file which a user PRG can create called
MSG.MSG[1,PRG]. This may occasionally cause confusion if both of these files
exist, since the MAIL program in that case will use MSG.MSG but CKMAIL will only
report on the ∂ file.
The CKSUM program can be used to keep checksums of various text files in order
to know when one or more files of interest have been changed. The checksums are
kept separate for each page, so that you can tell what page(s) have been
changed. This is the normal way of monitoring messages posted in the online
bulletin board file, BBOARD.TXT[2,2] (also called \BBOARD), or in other
discussion-type files. CKSUM provides the option of swapping to E to edit the
changed files, with simple E commands available to get to the pages that have
been changed. For complete details, see the online CKSUM documentation in the
file CKSUM.DON[UP,DOC], which describes all the options available.
A useful feature of the CKMAIL program is that when no argument is given, CKMAIL
will swap to the CKSUM program if the user has a checksum data file (CKSUM.DAT).
Thus, to run CKSUM, you can either say R CKSUM or simply CK (running CKMAIL
first).
A4.25 The RCV Command
The RCV program allows MAIL messages to be selectively deleted, listed, or saved
as desired. The program is called by simply entering the monitor command RCV.
All mail files which can be construed as being for you are offered for your
perusal. It is also possible to edit other users' mail files with RCV by giving
an argument, e.g., RCV BH. The command RCV * will allow editing of the system
message file NOTICE.TXT[2,2]. Most mail files are maintained in E format, and E
format is not preserved when such a file is edited with RCV--therefore:
NOTE: If you edit an E-formatted file, RCV will invalidate the directory
page and issue a warning. Such files should usually be edited with E to
preserve the pages and format!
RCV also allows editing of the files created by the news service automatic
notification feature; the command RCV \ will present your notifications for
editing, and RCV \PRG will allow you to edit the notifications sent to user PRG.
It is also possible to use RCV on files not in [2,2] (such as saved message
files previously created with RCV) with a command like:
RCV #filename
with default of DSK:SAVED.MSG in your (alias) disk area. The conventions given
below for output filenames also apply here.
Finally, the command RCV ?PRG will type the plan file for user PRG, if there is
such a file. In this case, the file is merely typed, not edited.
NOTE: Once RCV has opened a message file, you should exit only by typing "E"
to an option request, as explained below. Typing <CALL> to exit may result
in losing some of your message text!
RCV deletes without comment all <FORM> characters in any file edited (that is,
any file actually changed). Thus any page structure of such a file is destroyed
by RCV.
When a mail file is opened, messages are typed out one at a time, and for each
message you may select several processing options, in the format
<options> [ <space> <filename> ] <cr>
where the [...] represents an optional argument. Each option is represented by
a letter; more than one may be used, except that a few options must be used
alone, as noted below. The filename may be specified if you select the C (copy)
or T (transfer) option. For help in specifying a file, use ? as the filename.
Here are the option letters which select a final disposition for the message:
S Save the message in the mail file.
D Delete it from the mail file.
C Copy it to a file of your choice.
T Transfer it to a file. Like CD.
L Line printer spool it.
X XGP spool it.
K Transfer it to the file LOGOUT.MSG, which will be typed automatically
when you log out.
If none of the above are used, the message will be Saved. Combinations may be
used, e.g., LD will spool the message on the line printer and also delete it
from the mail file. The message will be Saved unless D or T is explicitly
specified. Along with any of the above (or alone, implying S) may be used at
most one of the following editing options:
A Append to the message from the terminal.
Z (displays only) Edit the message line-by-line using the system line
editor. If you need help with this facility, type <control><meta>? after
entering the line editing mode.
M (displays only) Modify the message by running the text editor, E, with
that message as its input. Return from E by typing <control>X RUN.
Along with any of the above, or alone, can be used the following option letters
to avoid seeing more messages:
E Exit, and enter spooling requests from L or X options.
N Go to the Next mail file, if any, else exit like E.
If the message was longer than the amount RCV types out before asking for option
requests, the following option may be used along with any others specified:
Q Quiet processing; do not type the remainder of the message while
processing it as usual.
Note: E or N with no other options implies Q automatically. Alternatively, any
of the following may be used as the only option, for special processing:
P Postpone the decision for this message. This applies only if the message
was longer than the amount RCV types before asking for options, and you
wish to see the rest of the message before choosing options.
? Type this option list.
Spooling requested by L or X is not done until RCV is exited (by typing E to an
option request, or by running out of input). The default filename for C and T
is DSK:SAVED.MSG in your alias area. Filenames may only be given along with a C
or T option; if C or T is used without a filename the previous file is
continued. (The first time, you will be asked for a filename, which may be
simply <cr> for SAVED.MSG.)
If you use an argument in the RCV command to edit another user's mail, the first
time you specify any option which would remove a message from the mail file or
alter its contents you are asked to confirm it. Once you have confirmed such an
option, however, you are not asked again.
There are two options provided at displays for editing the text of a message.
The M option writes the message in a disk file, QQRCV.TMP, and runs the E
editor, which allows great flexibility because of E's powerful editing
capability. However, it is rather slow, because all of RCV's internal
information and all the message files must be saved on the disk. For minor
corrections to a short message, you may prefer the weaker but faster editing
capability provided in RCV itself by the Z option. If you select that option,
the lines in your message will be presented to you one by one in your terminal's
line editor. You may edit each line, using the normal line editor commands, and
type <cr> when done with a line. You may also type the following special
characters (α means control, β means meta):
α<cr> Accept the current line as it now appears in your line editor
buffer and stop line editing, accepting the rest of the message as
is.
αβD Delete the current line.
<alt> Undo the changes in this line, loading a fresh copy into the line
editor.
αβ<cr> Accept lines to be inserted before the current line, until an
inserted line is terminated with α<cr> instead of <cr>, or <alt> is
typed at a blank line.
αβI Same as αβ<cr>.
αD (at the end of a line) Combine this and the next line and load the
combined line into the line editor.
β<cr> Break the line at the cursor, accepting the text to the left of the
cursor as it stands and editing the remaining text as a new line.
αβA Leave line edit mode, as for α<cr>, but accept text from the
terminal to be appended after the existing text, as if the A option
had been selected.
αβ? Type this list.
Blank lines presented for editing in the Z option are indicated by the typing
out of a space before loading the line editor with the empty line; thus
originally empty lines will be indented in the typeout. In both M and Z
options, the initial header line is not edited. In the Z option, the blank line
at the end of the message is not edited. In the A option, appended text will be
inserted in front of the blank line at the end of the message, unless the P
option was previously used on the current message.
The first time you specify C or T, you are asked to specify a file name if one
was not included in the option line. You can reply with either a standard
filename, ?, or <cr>. Just <cr> uses the default file name, DSK:SAVED.MSG in
your (alias) area. Just ? will print a helpful message and let you try again.
Thereafter, whatever file you specified will be used for all C and T messages
(the file is not closed until you exit or select another one) until you specify
a new filename along with a C or T option as described above. Note: if the
specified file already exists and is in E format, the new messages are added at
the end of the file preceded by a single <FORM>; if the file already exists but
is not in E format, the new messages are added at the beginning of the file. If
the file does not already exist, a warning that you are creating a new file is
issued; the file will be created in E format unless two conditions are met: if
the output file is not in the [2,2] directory, and the input file is in non-E
format, then the output file will also be in non-E format.
If all messages are removed from an input file, the file is deleted after all
output files are closed, unless the input file is named OUTGO.MSG in which case
the empty file (which may actually contain a few spaces, carriage returns, and
linefeeds) will survive. If none of the messages in an input file is deleted or
changed, RCV does not write out a new version of the file; thus the file's time
and date written are unchanged, and, particularly, any E directory the file may
have had is still intact.
The notation ↓chars↓ may be used to get non-alphameric characters in a filename.
In addition, a shorthand notation is provided for entering names of mail files:
if the character ∂ is the first character of the filename, then the device
becomes DSK, the default extension .MSG, and the default ppn [2,2]. (The
extension and ppn can be changed later in the filename.) If the next non-blank
character is not alphameric, the filename used is your programmer name right
justified, e.g., ↓ REG↓. (Note that this is your own login name, not the name
whose mail you are editing.) Thus, the filename ∂ represents your own mail
file. You can specify a different programmer name with the format ∂prg and
either this or the format ∂ can also be optionally followed by an extension
and/or a PPN to change the default values as described above, e.g., ∂.PUR or
∂[1,ME].
RCV has a fairly small message buffer. If a message is longer than that buffer,
seeing the first few lines of the message may tell you enough about it to decide
how to process it without seeing the rest. Therefore, in that case, you will
see as much as fits, followed by an overflow notice and an option request.
After you enter the desired options, the remainder of the message will be typed
as it is being processed, so you may safely use the Delete option and you will
still see the rest of the message. If you want to avoid this continued typeout,
type the letter Q (for Quiet) before your option choice, e.g., QD for Quiet
Delete. Q is only recognized when a message overflows. If you select E or N
with no other options, you get Q automatically. If this is not what you want,
type, e.g., SE. If you wish, you may postpone the decision on how to process
the message until after seeing the rest of it, by typing P to the option
request. This will type the remainder of the message and ask again for options.
QP is illegal, and P is only legal when a message overflows.
RCV may be used when not logged in; however, each user can control access to his
own mail, by OPTION.TXT options. Three possibilities are available. The
default is no access. To allow your mail to be read but not modified, put
RCV:READ
in your OPTION.TXT file. If the not-logged-in user types RCV PRG the file
examined is OPTION.TXT[1,PRG]. You may also allow not-logged-in users to edit
your mail file as if they were logged in by using
RCV:WRITE
as the option.
Not-logged-in users at Data Disc or III terminals are always given at least READ
access to mail, providing the message file is not protected against RCV.
It should be noted that the normal file protection mechanism still applies, so
that most options which involve copying the message to another file will not
work when not logged in. This includes C, T, K, L, X, M, and P.
A not-logged-in user who is reading mail as permitted by the READ option may
safely use <call> to quit RCV.
There is a special option available in RCV for reading the A.P. news digest.
This option is provided when the RCV command is given without an argument, if
you have an OPTION.TXT file with a line of the form
RCV:DIGEST;
You are asked "Read A.P. digest?" if the digest file exists. This option may be
used along with READ or WRITE as described earlier.
Another special option available through the OPTION.TXT file is:
RCV:NOMAIL;
If you have this option and give the RCV command without an argument, RCV
ignores your main message file and simply processes any other files which it
would normally handle. This is provided for users of various special RCV
features (such as DIGEST above) who use E to edit their mail files since mail
files are normally in E format. To override the NOMAIL option (i.e., to edit
your mail file with RCV), give your programmer name explicitly in the command,
e.g., RCV PRG.
For use an non-display terminals, RCV has a mode in which it accepts terminal
input in SOS representation (see Appendix 10). The main reason for this is to
allow ?* instead of ∂ for redirecting messages to another mail file, but it can
also be used with the append option to allow appending upper/lower case text
from an upper-case-only terminal. The following notes apply:
1. When RCV is started, it decides whether or not to use SOS representation on
the basis of the FCS (full character set) bit maintained for each terminal by
the monitor. This bit is set by the TTY FULL command (or ESC F at a display)
and cleared by TTY NO FULL (or BREAK F).
2. Whenever RCV reads an altmode character from the terminal, it will enter
SOS mode and otherwise ignore the altmode, except that if you are already in
SOS mode the sequence ?<alt> will leave that mode. (If you are not in SOS
mode, of course, the ? will be taken as a real question mark and the <alt>
will enter SOS mode!)
3. These comments apply even to the original command line, although the
monitor will echo a crlf after the altmode to confuse you. Note that if your
FCS bit is off and you want to invoke the RCV feature which types a user's
plan file, you must say RCV ??prg instead of RCV ?prg as usual.
4. Under no circumstances is terminal Output done via SOS conversion. I hate
seeing all those question marks!
5. If you are in SOS mode and type ? followed by a character which is not
defined as an SOS code, the character will be treated, and echoed, as ASCII 7;
this will ring your terminal's bell if it has one, give an error message if
you are responding to an option request, and insert a π in your message if you
are appending.
A5 DART
DART (Dump And Restore Technique) is a program that saves disk files on magnetic
tape and restores files from tape to disk. Dart is used to make periodic
backups of the file disk. Dart is also available to users who wish to maintain
their own backup tapes.
Dart can be run by the monitor commands listed below or it can be started simply
by R DART. In the latter case, Dart signifies its readiness to accept a command
by typing an asterisk (*). All Dart commands are available directly as monitor
commands except for LIST (same as TLIST), EXIT, and the privileged commands
described later. Commands are typed on one line and terminated by RETURN. In
the Dart command syntax descriptions below, braces, { and }, are used to denote
optional items. Vertical bar, | , denotes an exclusive-or choice. Pointed
brackets, < and > , are used to enclose syntactic items that are defined below.
DUMP {<dest>←}{<source>}
REAP {<source>}
UNREAP {<source>}
RESTORE {<dest>←}{<source>}
PUMPKIN {<dest>←}{<source>}
UNPUMPKIN
PLIST
REWIND {<dev>{:}}
EOT {<dev>{:}}
ADVANCE {FILE|RECORD} {<dev>{:}} {<count>}
BACKSPACE{FILE|RECORD} {<dev>{:}} {<count>}
LOCATE {<dest>←}{<source>}
TLIST {<dest>←}{<source>}
LIST {<dest>←}{<source>} ;not available as a monitor command
TURKEY P<number>|T<number>
EXIT ;not available as a monitor command
<dest> ::= {<dev>:}<file>{.<ext>}{[<prj>,<prg>]}
<source> ::= {{<dev>:}{[<prj>,<prg>]}@}
{<dev>:}<file>{.ext}{[<prj>,<prg>]}{,<source>}
<dev> is one of DSK, MTAn, or UDPn.
<file> is any file name or *
<ext> is any file extension or *
<prj> is any project code or *
<prg> is any programmer name or *
<count> is any string of decimal digits.
Now here are the details of the various Dart commands.
RESTORE This command will restore from tape to the destination the files that
are described by the source term. A null source or destination means
*.*[current alias]; this means that the command
RESTORE OPTION.TXT[1,ME] will read the named file from tape and write
it on your current disk area (alias). The command
RESTORE [*,REG]←[*,REG] will restore all of REG's files to the areas
that they were dumped from. Note that if any * terms are specified
or implied in the source, the entire tape will be searched for
matching terms.
PUMPKIN This command is just like RESTORE except that instead of restoring
files from tape immediately, it queues a request with the Great
Pumpkin, who comes by night to restore your files. It will restore
from the most recent system dump tape(s) containing the file(s),
unless you follow the command name with a switch in the form /P781 or
/T31 to request a specific DART tape, or of the form /4-Oct-78 or
/10/4/78 to request a version written on that date or earlier. (This
would be useful if a file has been overwritten and dumped, and you
want to restore an earlier version.) Don't specify a source device
with this command.
UNPUMPKINThis command takes no arguments; it lists all pending PUMPKIN
requests from your programmer name, and allows you to delete the
requests selectively.
PLIST This command takes no arguments; it lists all pending PUMPKIN
requests, including the date on which each was entered.
REWIND This command will cause the device named to rewind to load point.
MTA0 is the default if no device argument is used. The device named
should be a magnetic tape unit.
EOT This command will cause ADVANCE FILE to be repeated until either two
adjacent file marks are seen (logical end of tape) or until physical
end of tape is reached. The tape is left positioned between the two
consecutive file marks, so that subsequent dumping will overwrite the
second mark, thus removing the logical end of tape mark when more
data is written.
ADVANCE or ADVANCE FILE This command will cause the tape to advance past the
next file mark on the tape. If a repeat factor is given, then the
command will be repeated that number of times. Note: DART often
records more than one disk file on a mag tape file! Therefore,
ADVANCE FILE will (sometimes) skip more than one disk file.
ADVANCE RECORD Same as ADVANCE FILE except that instead of file marks,
record marks are used. This command leaves you at the front of a
record.
BACKSPACE or BACKSPACE FILE This command will cause the tape to move
backwards until a file mark is seen. DART then does one ADVANCE FILE
operation to position the tape at the front of a file (immediately
after the file mark just read). If a repeat argument is given, then
that argument is used to repeat the backspace operation. Only one
ADVANCE is used, after all backspace operations. Note: BACKSPACE or
BACKSPACE 1 will position the tape at the front of the current mag
tape file. BACKSPACE 2 will position one previous, etc.
BACKSPACE RECORD Same as BACKSPACE FILE except that record marks are used to
stop the operation instead of file marks. After all backspaces are
completed, DART does an ADVANCE RECORD command.
LOCATE For each file named in the argument list, this command prints the
tape numbers where this file was dumped and the corresponding
creation dates of the file.
TLIST This command will list on the destination device the names of the
files that are read from the source device.
TURKEY This command takes as its argument the number of a DART system dump
tape, and tells you who last used it. It is to find out whose thrug
to squuk if you find a DART tape lying around not where it belongs.
DUMP This command will write on the destination device, which should be a
magtape (default is MTA0), those files that are specified by the
source term. If there is no source argument, *.*[current area] is
used.
REAP The REAP command takes a list of files, like DUMP, and causes those
files to be dumped twice and then deleted. More specifically, files
marked by REAP will be dumped in the next permanent-class system dump
(P-dump) regardless of when written or whether or not marked
dump-never. If a file so marked has then been dumped on a permanent
tape at least twice, it will be deleted. Note that the file will be
P-dumped at least once after you give the REAP command even if it had
already been P-dumped twice or more. No notification is given when
the files are deleted; once you have REAPed a file you should
consider it gone. However, there is an UNREAP command which will
remove the REAP indication for one or more specified files, if they
have not yet been deleted. Any modification to a file clears the
DART information word, and therefore UNREAPs the file. That is, it
will not be deleted automatically unless you re-REAP it after the
modification. REAPing a file does not remove it from the calculation
of the disk space you are using, until the file is actually deleted.
Therefore, a REAP command at the last minute before a purge will not
keep you from being purged. If you REAP your files as soon as you no
longer need them, though, they should be gone when the purge comes
around. DIRECTORY, DIRED and friends indicate that a file has been
marked for reaping by showing an "R" in the "dumped" column.
UNREAP The UNREAP command takes a list of files and removes the reap-mark,
if any, from each of those files, thus undoing the effect of a REAP
command (if the files have not already been deleted).
A5.1 Dart Tape Format
Tapes are usually recorded at 800 BPI, odd parity. Record length does not
exceed 1280 words. There are three types of records: Header-Trailer records,
File-Start records, and Continuation records.
Header-Trailer Record Format
Word 0: version,,length version is the positive version number of the DART
that created this tape, length is the length of the
data following
Word 1: 'DART ' sixbit DART
Word 2: '*HEAD*' or '*TAIL*' data in sixbit
Word 3: time,date BYTE(3)HIDATE(10)0(11)TIME(12)LODATE, where TIME is
in minutes after midnight, HIDATE is the high-order
field of the date in system format, and LODATE is
the low-order part of the date
Word 4: ppn the name of the person running Dart
Word 5: class,,tapno Tape number of this tape and Dump class of this
dump. Tape numbers are kept only for system class
dumps. User class is class 0. Classes 1 and 2 are
system classes (Temporary and Permanent).
File-Start Record Format
Word 0: -n,,length -n denotes file-start records, length is the number
of data words that follow, and "n" is the format
number of this tape. There have been two formats
used: formats 1 and 2. The only difference is that
word 21 below (word 17 of the retrieval) is zero in
format 1 but holds the record offset of the given
file in format 2. If a file start is seen, then at
least all of the retrieval data (words 2-21 below)
is present in the current magtape record.
Word 1: devnam name of the source device
Words 2-21 file retrieval of this file as it appeared on the
disk
Word 22-length data from the file
Word length+1 exclusive-or of words 1-length
Word length+2 if this is 0, skip to next record; if this is <0,
treat as word 0 above
File-Continuation Record Format
Word 0: 0,,length length is the number of data words
Words 1-length data from the file
Word length+1 exclusive-or of words 1-length above
Word length+2 same as in File-start record
A5.2 Dart File Backup Policy
The following policy describes the use of Dart for backing up the disk on tape.
There are three classes of system dump: Full, Permanent and Temporary. Full
dumps are never done at SU-AI. (Instead, disk pack copies are done
approximately every 3 months, to protect against disk crashes.) Permanent dumps
are made approximately once a week. Temporary dumps are done approximately
daily Monday through Friday of each week.
Permanent tapes are kept practically forever. Temporary tapes are kept about
one month before being re-used. The rules below determine what files are dumped
in a system-class dump.
1. The following types of files are never dumped in a system-class dump: empty
files (those of length 0); files with protection of 400 or greater; and
files which are estimated to not fit on one tape (this currently refers to
any file larger than about 2209 Kwords).
2. Any file not covered by 1 above will be dumped if it has the dump date
invalid bit set (this generally means that during a recent dump, Dart
didn't finish dumping this file).
3. A full dump will dump all files except those eliminated by 1 above.
4. A P dump will dump all files (not covered by 1) that have been P-dumped
fewer than 2 times and are more than 4 days old. A P dump will also dump
any file marked for reaping no matter how old the file is or how many times
it has already been dumped.
5. A T dump will dump all files (not covered by 1) that have never been
P-dumped and have never been T-dumped.
The intention of this policy is to provide backup for the disk to prevent total
loss of files in a major crash. A secondary effect is to provide individuals
with short term backup against their own mistakes. It is not the intention of
this policy to provide eternal backup of every file that ever appeared on the
disk.
A5.3 Privileged Dart Commands
The area [DMP,SYS] is privileged to make backup dumps of the disk. The
following commands are legal if you happen to be logged in as [DMP,SYS].
FDUMP Full dump of the disk
PDUMP Permanent Dump of the disk
TDUMP Temporary-class dump of the disk
PICKUP Continue with a privileged dump after a system crash.
PRESTORE Restore files requested by Pumpkin commands.
MRESTORE Restore files from a Master file-restore list, used
in the event of a disaster such as a disk crash.
PURGE Dump some files to Permanent tape and then delete them.
The FDUMP, PDUMP and TDUMP commands all take an optional argument of the form
<dev>:← which specifies the tape to dump to.
A6 NETWORKS
Users of WAITS can utilize many other computers by connecting to such computers
through one or more networks. The main networks connecting directly to SU-AI
are the ARPA network and the SUNet. The ARPA network is a facility organized by
the Advanced Research Projects Agency of the Department of Defense to connect
computers at various research centers funded by ARPA. SUNet is an Ethernet
reaching various computers at Stanford.
Two main system facilities are provided for connecting to other computers on
some network: the user Telnet program and the File Transfer Protocol program
(FTP). Telnet allows you to use your terminal as if it were a terminal of the
remote host computer; FTP provides high-speed transmission of data between
hosts. This appendix explains the use of the system programs that provide these
capabilities. Users can also write their own special purpose programs which
access a network; device IMP is used to deal with the ARPAnet and device PUP is
used to deal with the Ethernet. Details on using these devices will be found in
the UUO Manual; users are also encouraged, when building their own network
programs, to take advantage of the network software package found in the file
NETWRK.FAI[SUB,SYS].
A network connection typically involves a program at both hosts. For example,
to make a Telnet connection to another host, you run the user Telnet program
here. This program establishes a connection with the server Telnet program at
the other host. We provide user and server programs for several protocols
besides the main ones described here; for example, the monitor commands WHO,
TALK, and FINGER can function as network user programs for special protocols
when directed to another host.
Below are several monitor commands used to make Telnet or FTP connections to
other network computers. Each of these commands takes as argument the name of
the remote host you wish to use. You must be logged in to give any of these
commands. Except where noted, these commands work to connect you to a host on
either the ARPAnet or the SUNet.
Command Description
TELNET or TN Either of these commands makes the "normal" Telnet
connection to a remote host, allowing you to use your
terminal as if it were on that host. The TELNET and TN
commands are equivalent.
SUPDUP or SD Either of these commands runs a special version of Telnet
for using remote displays with the particular hosts that
support the Supdup protocol. The hosts supporting this
protocol are primarily WAITS systems and the ITS systems at
MIT. Type SD ? to find out which hosts you can Supdup to.
The SUPDUP and SD commands are equivalent.
DTN This command makes a Telnet connection using a program that
simulates, to the remote host, a Datamedia 2500 terminal,
while converting the resulting Datamedia display output to
whatever is appropriate for your actual display. This
allows you to use Datamedia support on other systems even if
you don't have a Datamedia.
OTN This command makes an ARPAnet connection using the "old"
Telnet protocol, which is now largely obsolete.
FTP This command make a File Transfer Protocol connection with a
remote host, allowing you to transfers files and/or file
information between the local and remote hosts.
Each of the above commands takes a remote host name as argument (some will also
accept a host number or a "socket" number -- see details later in this
appendix). You can use the following command to find out HOST names, numbers,
and descriptions.
HOST This command takes a host name and tells you what that host really
is. If you supply a nickname, you'll find out the formal name; if
you supply a formal name, you'll find out some details. If you don't
give any argument, then the entire host table is typed out (it's
fairly long). You don't have to be logged in to use the HOST
command.
A6.1 The User Telnet
There are several externally-similar user Telnet programs available.
Our normal user Telnet program is run by the TELNET or TN command, which takes a
host name as argument. The program attempts to connect to the specified host.
It will type "Trying" when it starts setting up the connection, then "Open" if
successful, or an error message otherwise. The TELNET and TN commands use the
so-called new Telnet protocol, which is the current standard.
The OTN command is similar but uses the old ARPAnet Telnet protocol, in case you
need to use that protocol, which is mostly obsolete.
The DTN command invokes the Datamedia simulator Telnet program. This allows you
to use another system's Datamedia support even if your display isn't a
Datamedia. The DTN program is explained further on page 159.
The normal syntax for all of these commands is simply:
TELNET host
where "host" can be either the official name or a nickname of the host of
interest. If you want to connect to a non-standard socket at the given
destination, then you can use either the form:
TELNET socket,host
to connect to a particular socket on an ARPAnet host, or the form
TELNET subnet#host#socket
to connect to a particular socket on an Ethernet host (the "#" characters are
actually typed here and the three fields are numeric). The program will prompt
for an argument if one isn't given. A "?" typed in the command line makes the
program type out a short help message.
The normal host field can be a host name or number. Numbers are octal unless
followed by a decimal point or if an 8 or 9 occurs in the number, in which case
it is assumed decimal.
The host name or number is the network site you wish to connect to. There is a
list of hosts in this appendix; an up-to-date list can be seen by giving the
monitor command HOST.
The socket number argument is used to connect to some special server program at
the remote host, rather than the normal Telnet server; for instance, on the
ARPAnet socket 27 gets you the normal Telnet server and socket 3 gets the FTP
server. Special servers are used to handle commands like WHO given with a host
name as argument. Normally only the maintainers of network programs will need
to specify socket numbers.
A6.2 TELNET, DTN, OTN, DIAL and PTYJOB
In addition to the user Telnet programs TELNET, DTN and OTN, there are two other
similar programs that let you talk to a selected computer system. These two
other programs are: (1) DIAL, which lets you dial out through the telephone
network to any computer reachable that way; and (2) PTYJOB, which lets you use
many of the features of Telnet although you are still connected to WAITS
(through a PTY--a pseudo terminal). Much of the information that follows
applies not only to one or more of the Telnet programs, but also to DIAL and
PTYJOB. In particular, the discussion below about character-set conversion
applies fully to DIAL. Since PTYJOB goes from WAITS to WAITS, there is no
conversion involved, however some of the features for typing certain characters
to remote hosts through Telnet and DIAL can also be used in PTYJOB. The format
of the DIAL command is explained on page 86. The PTYJOB program is run by
typing R PTYJOB to the monitor.
Foreign hosts do not use the WAITS character set. Instead, they accept standard
ASCII codes. Letters, digits, and most of the punctuation characters available
in ASCII are the same in the two character sets. The main difference is that
codes 1 to 37 (octal), used for special printing characters in WAITS, are
control characters in ASCII. The precise use of these control characters is
defined by the remote host. TENEX hosts, for example, use ASCII control-A to
mean "delete one character," like our BS.
Telnet has two modes: display and transparent. Display mode is legal for all
terminals, is the default mode for all displays, and is the only mode available
on a DD or III. Transparent mode is the default mode for non-displays and is
also available on individual displays (but not on DDs or IIIs). DIAL and PTYJOB
provide only display mode.
A6.3 Display Mode (Telnet, DIAL and PTYJOB)
In display mode, character set conversion is done between WAITS ASCII and
standard ASCII. To provide easier use of the standard ASCII character set,
Telnet, DIAL and PTYJOB interpret the CONTROL bit to mean ASCII control; i.e.,
CONTROL on a letter makes Telnet (et al.) convert the letter to upper case and
subtract 100 from the character code. Thus, CONTROL-A becomes ↑A (code 001) and
CONTROL-C becomes ↑C (code 003) before being sent to the remote host. Telnet
(et al.) uses META and CONTROL-META characters as commands to itself, as listed
later. In some cases, META and CONTROL-META are equivalent. In others, a
processing switch is set by META and cleared by CONTROL-META. Display mode is
the only legal mode for DD's and III's.
In the DIAL and PTYJOB programs only, a non-display user can enter commands
either by using the META and CONTROL-META forms used on displays or by using the
command escape character (initially ↑↑, control-uparrow). Typed once, the
command escape is interpreted as the display CONTROL bit, which becomes ASCII
control (thus ↑↑ A gives ↑A). Typed twice, the command escape is taken as META,
to give a basic command (thus ↑↑ ↑↑ Q is the Quit command). Typing the command
escape three times gives CONTROL-META, to enter a complement command (e.g.,
↑↑ ↑↑ ↑↑ D closes an output file).
Below are the differences between the WAITS ASCII and the standard ASCII
character sets (not counting the control characters). Automatic conversion
handles the following translations (in display mode):
char WAITS ↔ external
~ 32 ↔ 176
} 176 ↔ 175
ALT 175 ↔ 33
≠ 33 → 33
EOF 612 ← 32
The WAITS not-equal has no external representation and cannot be entered from a
remote host. All codes other than those listed above are transmitted unchanged.
Note that our BS (octal 177) is the ASCII delete; there is an ASCII backspace
(10), which is our λ. Typing λ or CONTROL-H to Telnet will produce that code.
The other possible ambiguities are our characters ↑ (136) and ← (137). These
codes have two different meanings: the DEC PDP-10 version of ASCII agrees with
our use, but the official version uses those codes for ∧ and _. Our network
programs support the arrow version, and our ∧ and _ characters are transmitted
unmodified as 4 and 30.
A6.4 Transparent Mode (Telnet only)
In transparent mode, no character set conversion is done. All ASCII characters
(including ↑C) are read and transmitted as is, with the single exception of the
Telnet command escape character which is used to give commands to Telnet. The
default command escape character is different for different classes of
terminals: for non-displays, it is ↑↑ (control-uparrow, octal 036); for EDIT-key
individual displays, it is EDIT-NULL; and for NOEDIT individual displays, it is
NULL. (Remember that transparent mode is not available on DDs and IIIs.)
To give Telnet a command while you're in transparent mode, you type the command
escape character followed by the command letter of interest. Following the
command escape with a minus sign (-) complements the command indicated by the
following character. To send the command escape character itself to the remote
host, you simply type it twice in a row (this is similar to a TIP's use of @ as
the escape character and doubling it to transmit it). For example, on a
non-display ↑↑E does the E command and ↑↑-E does the E complement command.
Transparent mode is generally the more convenient mode on non-displays since it
really makes almost everything you type be transmitted unchanged to the remote
host; for that reason, transparent mode is the default on non-displays.
(Display mode is the default on all displays.)
Transparent mode is also useful for individual display users wishing to use a
foreign host's display service. For example, if you want to use TVEDIT on a
Tenex system, you can go into transparent mode and tell Tenex you're on a
display. In transparent mode, all characters typed, including those using the
EDIT key or the NULL character, are passed to the foreign host just as they are,
with no interference from the WAITS terminal service (the only exception is the
current command escape character). Similarly, output from the foreign host is
passed to the user's terminal unchanged.
The command escape character can be changed to any character you want; use the X
command (↑↑X on a non-display, EDIT-NULL X on an EDIT-key display, NULL X on a
NOEDIT display) followed by the character you want as your command escape.
Transparent mode is not available in DIAL or PTYJOB.
A6.5 DTN: Datamedia Simulator Telnet
A special version of Telnet, called DTN, uses a Datamedia simulator instead of
the page printer, so that the Datamedia service of the remote host can be
utilized, even on a DD or III. Naturally, DTN only runs on displays.
Additionally, actual Datamedia users are probably better off using Telnet in
transparent mode, since besides the grossness of simulating a Datamedia on a
Datamedia, it is also rather gross to use since the simulator's keyboard control
has been oriented around the DD keyboards. However, DTN may be useful on
individual displays other than Datamedias, since the remote host may support
Datamedias but not the particular individual display type that the user has.
DTN is invoked by the DTN monitor command, and it takes the same format of
commands as TN. When the connection is completed, the screen clears, and you
are on a simulated Datamedia. The CONTROL bit maps to ASCII CTRL, and the META
bit maps to the Datamedia EDIT key. NULL is sent the way you do it in ASCII,
i.e., CTRL-@, entered by CONTROL-@.
Commands are entered as follows: to do the basic version of a command, you use
CONTROL-META-FORM followed by the command letter; e.g., CONTROL-META-FORM Q gets
you out of DTN. To do a complement command, use CONTROL-META-VT followed by the
command letter; e.g., CONTROL-META-VT D closes an output file.
A6.6 Commands to Telnet, DIAL, and PTYJOB
The command table below lists the various commands for Telnet (TELNET, OTN,
DTN), DIAL, and PTYJOB. Except where otherwise noted, each of the commands
applies to all of these programs. Commands to Telnet (et al.) are never echoed,
although their effects may cause terminal output.
The proper way to flush a connection from Telnet is with the Q (for Quit) or C
(for Close) command (their complements are the same). This gracefully closes
the network connection and in the case of the C command prompts for another host
to connect to. On a non-display in transparent mode, this is either ↑↑Q or ↑↑C.
CALLing out of Telnet is never a good way to flush a connection and of course
can't be done in transparent mode since ↑C is an ordinary character passed to
the foreign host. The Q command is also used to quit from DIAL or PTYJOB.
Before we get to the command table itself, here is a table that summarizes how
commands and their complements are entered from various types of terminals in
display or transparent mode. For convenience, the command form used in SUPDUP
(see page 161) is also included here, although SUPDUP does not use the commands
from the second table below.
How to type a command called x
Terminal type Mode Basic Command (βx) Complement (αβx)
any terminal display mode META-x CONTROL-META-x
non-display Dial/Ptyjob ↑↑ ↑↑ x ↑↑ ↑↑ ↑↑ x
non-display transparent ↑↑ x ↑↑ - x
EDIT display transparent EDIT-NULL x EDIT-NULL - x
NOEDIT display transparent NULL x NULL - x
any display DTN CONTROL-META-FORM x CONTROL-META-VT x
any display SUPDUP ESC I x
Note: we use β and αβ below to indicate respectively the basic version and the
complement of any command, since β usually means META and αβ is CONTROL-META and
those are the ways of entering commands in display mode. ⊗ below means either
version of the command (β or αβ) can be used.
In commands that request a filename, the filename may be ended with altmode to
abort the command; there is no default file name or extension, and the PPN
defaults to the alias PPN in the usual way.
Commands to Telnet (TELNET, OTN, DTN), DIAL, and PTYJOB
⊗A (Telnet only) Sends an ATTN to the foreign host. This usually means
something like "return to monitor", but not all hosts may implement
this.
⊗B (Telnet only) Sends a BREAK to the foreign host. This is distinct from
ATTN, and most hosts probably don't implement this.
⊗C (Telnet only) Closes the connection and asks for a new host name to
connect to. This also exits transparent mode and closes any output
file open.
βC (DIAL only) Turns on control character mode. In this mode all
characters received from the dataphone are typed on your terminal.
This is the default.
αβC (DIAL only) Turns off control character mode. In this mode, octal
codes 1-10, 16-37, and 177 are not typed on your terminal when received
from the dataphone.
βD Opens an output file. This command asks for a file name, then proceeds
to write everything that comes from the foreign host in this file.
Type ALT when asked for the file name to abort the command. Note that
characters you type, or characters from any input file that is opened,
do not go into the output file unless the foreign host is echoing them.
αβD Closes the output file. ⊗Q and ⊗C (Telnet only) also do this.
βE Local echoing mode: This makes WAITS echo your input characters and
forces the foreign host not to. In the DIAL program, this makes you
look like a half duplex terminal and does not change the state of
remote echoing.
αβE Remote echo mode: This turns off echoing within WAITS and requests the
foreign host to echo user typein. If the foreign host refuses to echo,
the echo state is restored to local echoing. In the DIAL program, this
turns off local echoing but does not attempt to change the state of
remote echoing.
βF Opens an append file. Everything sent from the foreign host gets
appended to a file that already exists. If there was a file previously
opened with βD, it will append to that, otherwise this command will ask
for a filename.
αβF Same as βF, but always asks for a filename.
βI Opens an input file. Everything in the file is sent to the foreign
host. Asks for a filename. Type ALT to abort the command.
αβI Closes the input file. ⊗Q implies this as well. This may not be
noticed if the program is busy sending the input file's text to the
remote host.
βJ (Telnet only) Echo mode: Turns on local echoing without consulting the
foreign host. See βE.
αβJ (Telnet only) No echo mode: Turns off local echoing without consulting
the foreign host. See αβE.
⊗K (Telnet only) Sends a protocol command to kill the remote job. This
command is not guaranteed to work since many hosts do not implement the
network logout protocol.
βK (DIAL and PTYJOB only) Inhibits the echoing of LF after CR. The system
normally types a LF out when you type CR. This command inhibits that.
This command is different in effect from βR below, because it alters
only what appears on your screen, not what goes out over the line.
αβK (DIAL and PTYJOB only) Enables the echoing of LF after CR. The inverse
of the above command.
βL Enters line mode. This gives you the line editor on input. This is
the default for displays unless telnetting to an ITS system. The line
editor is always echoed locally, but in remote or no echo mode the line
editor will vanish after activation.
αβL Enters character mode. Transmission is character-at-a-time. This is
the default on non-displays and when telnetting to an ITS system.
Useful for running DDT at a remote host.
βM (PTYJOB only) Enters a mode in which all 9-bit characters you type are
sent unchanged to the PTY except βM, αβM, βZ, and αβZ. (Of course, if
you are in line-at-a-time mode some control characters are still
interpreted by the system line editor.)
αβM (PTYJOB only) Leaves the above mode; META-characters are again
interpreted as commands to PTYJOB.
⊗O (Telnet only) Sends an ABORT OUTPUT command to the foreign host. This
should have an effect like that of ESC O locally on WAITS.
βO (DIAL and PTYJOB only) Turns on terminal typeout. See αβO below.
αβO (DIAL and PTYJOB only) Turns off terminal typeout. Useful when output
is already going to a file and you don't want to waste the time it
takes to type out on your terminal as well.
⊗Q Quit: Closes the connection and exits. Also closes any output file.
βR (Telnet only) Same as βI, but reads the file character-at-a-time
instead of buffer- at-a-time. This is less efficient, but also results
in much less messy output, as the characters will be sent
synchronously. Asks for a filename.
αβR (Telnet only) Closes the input file, just like αβI (see above).
βR (DIAL and PTYJOB only) Inhibits the sending of LF after CR. Normally,
when CR is typed, a LF is invented by the system and CRLF is sent to
the foreign host. This command inhibits sending the LF after the CR.
αβR (DIAL and PTYJOB only) Enables the sending LF after CR. The inverse of
the above command.
⊗S (DIAL and PTYJOB only) In line mode, this sends the text in the line
editor now, without waiting for an end-of-line character. If the ⊗S is
preceded by one or more octal digits with ⊗ (e.g., ⊗1⊗7⊗7⊗S) then the
specified octal code is sent as a character. For example, ⊗0⊗S will
send a null.
βT (Telnet only) Enters transparent mode. Character set conversion and
local terminal handling are disabled.
αβT (Telnet only) Enters non-transparent mode. Character set conversion
and local terminal handling are enabled.
⊗W (Telnet only) Gets a status message from the host (sends an "are you
there" query); some hosts don't implement this.
⊗X Changes the command escape to the next typed-in character. This is
only meaningful in transparent mode. On an EDIT-key display, the EDIT
bit (parity bit under user control) is considered part of the command
escape character, but on other terminals the parity bit is ignored in
checking for the command escape.
βY (DIAL and PTYJOB only) Enters Datapoint simulation mode. Works only at
a Data Disc terminal.
αβY (DIAL and PTYJOB only) Leaves Datapoint simulation mode.
⊗Z (PTYJOB only) Quotes the following 9-bit character, so it is sent to
the PTY as is, regardless of the state of the βM/αβM mode switch.
⊗<form> (DIAL and PTYJOB only) If there is an output file open, this inserts a
FORM character in it.
β@ (Telnet only) Disables debug mode. This is the normal state.
αβ@ (Telnet only) Enters debug mode. Currently this reports the Telnet
protocol negotiations between user and server.
αβ<alt> (Telnet only) Enters DDT if one is present. CPOPJ$G returns to Telnet.
A6.7 SUPDUP
SUPDUP is the WAITS implementation of the ITS SUPDUP program, which is used for
Telnetting to ITS sites or other hosts that implement this protocol. This
program uses the internal ITS display codes for highly efficient communication
and full use of ITS display programs over the network. In addition, SUPDUP
allows the user to send the full ITS ASCII character set (which includes some
very hairy characters) and maps both keyboard input and display output so that a
display (DD, III, or individual display) appears as a funny kind of ITS display.
To use SUPDUP, give the SUPDUP or SD monitor command followed by a host name.
The only hosts accepted are AI, DM, MC, ML, SAIL, and S1; some of these can be
abbreviated to a single letter. SUPDUP will then establish a connection with
the specified site, and after that you will effectively be a display there, with
full bucky bit capability. Since SUPDUP will set up your "display type" at the
foreign host, you should not try to set it yourself, as that may interfere with
SUPDUP's operation. SUPDUP will set things up to maximally utilize your
display.
Some mappings in input and output are made due to the differences between the
WAITS and ITS ASCII character sets. Most of these mappings are transparent to
the user. The design philsophy behind the mappings was to cause characters
typed on the WAITS keyboard to be seen by ITS as the character appears on the
key tops, and for characters received from ITS to be displayed as they would be
at a console at MIT.
Visible output mappings: Caret is mapped to AND sign (∧) since there is no code
in the WAITS character set for caret. There is no way to distinguish between
AND sign and caret. In addition, centered-dot, gamma, delta, and circle-plus
are not displayed (they generate an error message).
Visible input mappings: αz and αZ are mapped to [CALL], αβz and αβZ are mapped
to α[CALL] (deferred CALL), and α_ is mapped to [BACK NEXT]. ↑ is mapped to
caret; to send ↑ (distinct from VT), see below. Some other more obscure
characters must be sent by using a command; see below.
To enter a command to SUPDUP, type ESCAPE I followed by the command character.
The following command characters are defined:
B Toggles the blinking of the cursor.
K or L Kills the job on the foreign host and breaks network connections.
P Temporarily restores the page printer. Typing any character will
return your screen to the foreign display.
Q Quit: closes network connections and detaches the job on the
foreign host if there is one.
R Records the contents of the screen in a file; asks you for the name
of the file to write. REENTER does this too.
V Re-draws the current screen.
? Displays helpful information on using SUPDUP.
Command mode (typing ESCAPE I) also allows some of the more esoteric ITS
characters to be sent. For example, when preceded by ESCAPE I, any of the
following characters will be sent without being changed at all: ↑, α↑, β↑, αβ↑,
αz, αβz, αZ, αβZ, and α_. Special mappings exist for keys not on the keyboard
or trapped by the monitor. They may be sent with bucky bits, and they have no
explicit graphic here or on ITS, as they are special function keys. These are:
ESC I Function ESC I Function ESC I Function
. centered-dot [TAB] gamma [LF] delta
[CR] circle-plus [BS] integral ∂ [NULL]
λ [BACK SPACE] ≠ [CALL] ∨ [BACK NEXT]
α [ESCAPE] β [BREAK] ε [CLEAR]
To simplify using the last three functions above (the bottom row shown), another
slightly different command format is used. In this alternate form, instead of
using ESC I <char>, you use ESC n I, where n is a digit. The advantage is that,
on a DD, the TOP key is not needed to use this form; and the three commands
defined below exactly parallel the last three above.
Command Function Command Function Command Function
ESC 1 I [ESCAPE] ESC 2 I [BREAK] ESC 3 I [CLEAR]
A6.8 FTP: The File Transfer Protocol
The FTP command is used to transfer files between WAITS and another network
host. FTP can be used in two-ways: for a simple transfer, a single FTP monitor
command can be typed which contains all the information necessary for the
transfer, much like a COPY command; if several files are to be transferred, or
one of the less common protocol features must be used, the FTP command is first
used to establish a connection to a remote File Transfer Protocol server
program, and then you enter protocol commands to initiate transfers. FTP can
also be used for file manipulation other than transfers at a remote host, e.g.,
directory listings and file renaming and deleting.
Note: There are actually two different user programs that provide file transfer
capabilities: one for the ARPAnet and one for the Ethernet. However, the
monitor command FTP works for both networks, since the program run by this
command figures out which network you'll be using and swaps to the other program
if necessary. Although the two programs provide almost identical features and
commands, there may be some differences (the Ethernet version is just becoming
available as we go to press). The FTP documentation below officially describes
the ARPAnet FTP program; although you can generally assume the Ethernet version
is compatible, you might want to consult the latest documentation of the
Ethernet program by giving the monitor command READ PUPFTP<cr>.
Although the one-line FTP command is generally easier to use, this document will
start with the more detailed use of the protocol commands. The reason for this
choice is that to use even the one-line command effectively, you should
understand some of the underlying protocol, which is more apparent in the
multiple command mode of using FTP.
The FTP command is used to set up a connection to a remote File Transfer
Protocol server. It takes a host argument like Telnet, except that if a host
number is used it should be in decimal; to specify a nonstandard socket number,
the syntax is host#socket. (The normal FTP connection is to socket 3.) Once
the connection is set up, you can enter the following commands to the FTP
program. Each command is a name followed by arguments as described below. Only
the first four letters are significant (letters beyond four are ignored), and
commands may be abbreviated by enough letters to make the abbreviation unique.
Note that file specifications for remote hosts must follow the format
conventions of that host; they are passed on verbatim by FTP. In particular,
the case of letters may be significant at some hosts.
Note: FTP command strings sent over the control link to the remote host are
subject to character conversion to conform with standard ASCII, as described in
the discussion of the Telnet programs above. The processing of file data
depends on the transfer type; see the TYPE command below.
Some of the commands below are named the same as the corresponding command sent
over the network in accordance with the actual File Transfer Protocol; in some
cases alternate names are also defined. Complete information on the protocol is
available in the network document with NIC number 14333, although there have
been several modifications to the protocol since that document was written.
There is also a "new" FTP which is not, so far at least, actually in use.
We do not implement all of the protocol options. In particular, we accept only
MODE S (stream) and only STRU F (file). Our server accepts MODE and STRU
commands but only with the above arguments; our user does not provide any way of
specifying mode or structure.
When the connection is first established, our user FTP program tries to
negotiate an appropriate type and byte size with the other end's server. First
it sends TYPE I, and then BYTE 36. If the latter is accepted but the former was
not, it sends TYPE I again. (These commands are explained below.) If these are
not accepted, it sends BYTE 8, and if that is accepted, TYPE A. (All hosts are
supposed to accept BYTE 8.) If nothing is accepted, the program tries again
after you give the USER command, in case the problem is that their server was
written by an obnoxious security freak as at a well-known system in Cambridge,
Massachusetts.
The protocol provides an abort function which can be used to stop a transfer
which is in progress. This function can be requested in our FTP user program by
typing ESC I (from a non-display, type ↑← I). This will send the abort command
only if there is a transfer in progress. Many servers do not process the abort
sequence, but they should notice when we close the data connection. You may end
up, if you are doing a STOR, writing an incomplete file on the other system.
In the file transfer commands below, the character = can be used instead of
either ← or → as shown, for the convenience of users at non-display terminals.
TYPE x x is A, I, L, P, or E, and specifies the representation type for the
data. The uses of the various types are as follows:
TYPE A ASCII type means that the file to be transferred contains text. The
characters in the file will be transferred to or from the WAITS
character set, as explained for Telnet connections, and null characters
will be ignored. This type should be used to transfer text files to or
from a machine with a different text representation. Text files can be
transferred to or from other PDP-10 systems more efficently using image
type (below) if the few characters which are translated by ASCII
translation are unused in the file, since our character code is almost
the same as that of other PDP-10s. ASCII transfers of local files will
also eliminate the E directory or SOS line numbers, if any.
ASCII is an abbreviation for TYPE A.
TYPE I Image type means that the file is taken as a continuous stream of bits
and sent accordingly. The number of bits sent at a time is determined
by the byte size set with the BYTE command (below). The most efficient
byte size for us is 36, the size of a PDP-10 word. Any byte size which
is a factor of 36 can be used with no difficulty, if needed to
accommodate some other system. Byte sizes of 8 or 32, however, cause
extreme inefficiency because some bytes are split between two PDP-10
words. If you are retrieving a file from an 8-bit or 32-bit system,
you might want to use TYPE L (local byte), which uses only the first 32
bits of each PDP-10 word, and can therefore be implemented using the
normal ILDB/IDPB instructions. However, sending a file to such a
system in local byte type will lose bits 32-35 of each word.
IMAGE is an abbreviation for TYPE I.
TYPE L Local byte type, as explained above, treats the file as normal PDP-10
bytes of the size specified in a BYTE command. For byte sizes which
are a factor of 36, this is treated exactly the same as image type
(above); for byte size 8 or 32 it uses only bits 0-31 of each PDP-10
word. Byte size 32 is more efficient than 8 in this type.
LOCAL is an abbreviation for TYPE L.
TYPE P ASCII print type is treated by our system the same as ASCII type. This
isn't right, but the protocol is not consistent about what to do. Some
people interpret this type as indicating that the file contains FORTRAN
style format control characters.
TYPE E EBCDIC type is not implemented here. It is used for transferring text
files between two IBM systems. To transfer a text file between here
and an IBM system, use TYPE A; the IBM system will translate between
ASCII and their local character code as needed.
TYPE X This command to our FTP user program does not correspond to a real data
type in the protocol. Instead, it is treated as TYPE L here but tells
the other end TYPE I. Use this command if you are talking to an 8-bit
machine and want to use local byte type, but the other machine does not
accept the TYPE L command.
BYTE n n is a (decimal) number indicating the byte size of the network data
connection. Data will be sent from one host to another in bytes of
this size, for image type and local byte type transfers. ASCII
transfers always use a byte size of 8. (That is, each 7-bit local
character code is translated into an 8-bit network ASCII code and vice
versa.) The allowable byte sizes are 8, 32, and any factor of 36 (1,
2, 3, 4, 6, 9, 12, 18, 36). In general, the largest byte size which
will work is the most efficient. (Note: the protocol specifies that it
is the responsibility of the user FTP to ensure that 8-bit bytes are
used for ASCII transfers. Accordingly, our user FTP program does not
necessarily transmit a BYTE command as soon as the user types it;
instead, the byte size in the command is remembered for use in binary
transfers, and a BYTE command is sent to the FTP server whenever
necessary as the transfer type changes.)
USER x x is a string which the foreign host will recognize as a valid user
description, user name, or ppn. Not all hosts require a user name. If
the server requires a password to complete the login procedure, the
user program will ask for the password and turn off echoing while you
type it. Not all hosts require a password.
LOGIN x is a synonym for USER.
ACCT x x is an account number. Some hosts may require this for their
billing/accounting purposes.
XCWD x x is a user name, as in the USER command, which will be used as the
default directory for foreign file specifiers; the effect is like the
ALIAS monitor command here. The command name stands for change working
directory.
ALIAS x is a synonym for XCWD.
RETR x←y This command retrieves a file from the foreign host. x is a local file
specifier, and y is a foreign file specifier. The foreign file y is
copied to the local file x. Current settings (or default values) are
used for byte size and representation type. The x← string is eaten
locally, and the RETR y part is transmitted to the foreign host.
GET x←y is a synonym for RETR.
TTY x is a version of RETR which uses x as the remote file specifier, and
types the retrieved file on the user's terminal.
STOR x→y STOR means store, and this command is the inverse of the RETR command.
A local file x is copied to a foreign host where it is given the name
y.
SEND x→y is a synonym for STOR.
APPE x→y This command will append the local file x to the end of the foreign
file y.
PICKUP This command is used to resume an interruped multiple file transfer and
is explained further below.
LPPN This command selects local PPN mode, which means that a PPN in square
brackets is taken as a local WAITS PPN when appearing in a
single-pathname transfer command; see the section on multiple file
transfer, below.
RPPN This command selects remote PPN mode, which means that anything in
square brackets is assumed to be part of the remote filename when
appearing in a single-pathname transfer command; see the section on
multiple file transfer, below.
MAIL x x is a user ID (like our programmer name). Following this command you
are expected to type in a message which will be mailed to the specified
user at the foreign host. The message must be terminated with a line
containing only a period. The MAIL program (see Appendix 4) is a much
better way to send network mail.
MLFL x→y In this case x is a local file specifier, and y is a foreign user ID.
The text of the specified file will be mailed to the specified user.
The MAIL program is to be preferred over this command.
XSEN x is like MAIL, but the message is sent to the remote user's terminal if
he is logged in, like the SEND monitor command on WAITS. This command
and the two following ones are only implemented at a few network hosts.
The SEND monitor command uses this protocol if a network destination is
specified (the SEND command is to be preferred).
XSEM x is like XSEN but mails the message instead if the user is not logged
in, like the preferred SEND/YESMAIL monitor command.
XMAS x is like XSEN but mails the message also, whether or not the recipient
is logged in, like the preferred SEND/MAIL monitor command.
LIST x←y y is a foreign pathname, possibly including wildcard terms. The
directory listing of the specified pathname is stored in the local file
x. If x← is omitted, the listing is typed on your terminal.
DIRECT is a synonym for LIST.
NLST x←y is like LIST, but the listing returned is guaranteed to have no
extraneous information in it, simply one full pathname per line. This
listing is intended to be read by programs rather than humans, but if
you really want it....
HELP This command asks the foreign FTP server to send back a message
indicating what commands it takes, etc.
STAT x If x is omitted, this command asks the FTP server to send back
information regarding the FTP connection, e.g., socket numbers. If x
is a directory name at their host (like our PPN), it lists that file
directory. Note: contrary to protocol, most servers (including ours)
treat a STAT with no argument as a request for a listing of the
directory specified in the USER or XCWD command.
DELE x x is a foreign file specifier. The specified file is deleted at the
foreign host.
RNFR x x is a foreign file specifier. This command is short for rename from;
it must be immediately followed by a RNTO.
RNTO x x is a foreign file specifier. This command completes the file rename
operation started by RNFR. (Some hosts accept * for wildcard
specification in these commands.)
QUOT x x is any character string, which should be an FTP command with
arguments. The string is sent as is over the FTP control link (see
protocol, NIC 10596, for terms). QUOT was included to allow you to
execute commands which are as yet unimplemented here, or which are
nonstandard, specific to some serving host. It will be of little use
for those commands which require some special action by the FTP program
at this end.
BYE Terminate connections with the foreign host and quit.
QUIT is a synonym for BYE.
DISC is a synonym for BYE.
XIND x x is a local file specifier. The file will be read and processed as
FTP commands.
META-I This is like XIND; it will prompt for a local filename and then read
that file as a sequence of FTP commands.
A6.9 Multiple File Transfer
The RETR and STOR commands have some provisions for more convenient transfer of
groups of files when similar names are used at both ends. The normal format of
the commands requires the user to specify two file names, one for our local file
system and the other for the remote host's file system. Our FTP knows enough
about the filename syntax for certain systems (mainly the PDP-10 systems: ITS,
TOPS-10, TOPS-20, and TENEX) to be able to extract a local filename from a
remote one.
If only one filename is given in a RETR or STOR command, it is scanned to
determine both the local and the remote file specification. Normally (in local
PPN mode), the entire file specification is sent to the remote host except for
anything inside [square brackets], which is taken to be a local WAITS PPN. In
remote PPN mode, everything is sent to the remote host, and your own login or
alias PPN is used for the local file. Here are the rules for determining the
local file specification:
1. A "token" in these rules means a string of letters, digits, and the
characters - and @. An asterisk (*) may be used alone as a token to
indicate wildcard file groups, as explained below. If talking to one of
the ITS systems at MIT (MIT-AI, MIT-ML, MIT-DMS, and MIT-MC) then a period
(.) which follows a non-token character (space or punctuation) is taken as
the first character of a token; such a token may also end with a period.
2. If talking to one of the ITS systems, then a single left or right broket (
< or > ) may be used alone as a token, which will be completely ignored.
Otherwise, a token enclosed in brokets is ignored.
3. One or more tokens separated by commas, enclosed in square brackets ( [ and
] ), are ignored in remote PPN mode, as explained above; in local PPN mode,
there must be only one or two such tokens, and they must form a valid WAITS
project name or PPN.
4. Any characters following a semicolon (;) are ignored, except for the ITS
systems, for which the token preceding the semicolon is ignored.
5. A token followed by a colon (:) is ignored.
6. A single non-ignored token is taken as the local filename. Two such tokens
separated by a period (.) or separated only by one or more spaces are taken
as the local filename and extension. The characters - and @ in a token are
ignored, and the token is truncated to six or three characters for the
local filename or extension. (The leftmost six or three characters are
used.) A period which is taken as a token constituent, when talking to an
ITS system, is ignored for local purposes. If two or more non-token
periods are used in the filename, the token after the first period is taken
as the extension, and tokens after the remaining periods are ignored.
7. No punctuation characters may appear in the filename string except the ones
mentioned above. Spaces may be used anywhere except within a token.
The FTP program notifies the user whenever it determines the local file name
from the remote one in this way, and, in the case of RETR, checks to see if that
file already exists before writing it. If there is such a file, the user is
told so and can choose from these options:
Type <cr> to overwrite the file.
Type <lf> to overwrite the file and to automatically overwrite any other
file requested that already exists, without any further warnings for the
remainder of the FTP connection.
Type <alt> to abort the transfer.
Type CONTROL-<alt> to abort the transfer and to automatically abort any
future transfer that would have to overwrite an existing file. This will
apply during the remainder of the FTP connection. Files not written
because of this will be named as being skipped because they already exist.
Type another filename to write a different local file.
If this syntax is used, the implied local device is DSK. (Note that device
field in the remote file specification is ignored for local file purposes.) To
use a different device the local=remote syntax must be used.
A local filename or extension of * either in an explicit local file
specification or as determined from the remote specification is used to request
the transfer of more than one file by a single command. Wildcard device or PPN
is not allowed. If an explicit local file specification is used, it should
agree with the remote file specification in which components are wild, e.g., the
command
RETR *.EXT=<THEIRDIRECTORY>FILE.*
will store any file(s) retrieved with local filename FILE.EXT, probably not the
desired effect. Note also that an explicit local file specification with no
filename or extension implies *.*, so the command
RETR [PRJ,PRG]←REMOTE.FILE
will be treated unnecessarily as a multiple retrieve. This will work but will
involve unnecessary operations. The desired effect can be obtained in local PPN
mode simply by typing
RETR REMOTE.FILE[PRJ,PRG]
which will take the PPN as applying to the local output file, and will send only
the filename and extension to the remote host. In remote PPN mode, it is
necessary to repeat the filename:
RETR REMOTE.FIL[PRJ,PRG]=REMOTE.FILE
There is no corresponding local/remote switch for device names, which are always
considered remote. Therefore, you must say, e.g.,
RETR UDP1:REMOTE.FIL←REMOTE.FILE
to avoid causing a multiple RETR. The TTY command can be used to avoid having
to repeat the filename for the specific case of device TTY.
In the case of multiple STOR, the selected files are found in the user's local
file directory and a STOR operation is performed for each file found which
matches the template. The remote file specification is scanned for each
operation and the character * is replaced wherever seen by the local filename or
extension. (The first * is replaced by the local filename unless the character
. (or, for ITS hosts only, space) precedes it, in which case the local extension
is used. A second * is replaced by the local extension.) If the end of the
specification line is seen before any replacement has been done, the local
filename and extension are inserted before the carriage return as if *.* had
been seen there, so that a command like
STOR *.SAI=<DIRECTORY>
will work. In this situation the filename and extension will be separated by a
space for ITS hosts or a dot otherwise. No great effort is made to ensure the
syntactic correctness of the resulting remote file specification; presumably the
remote host will complain if necessary.
For a multiple RETR, the remote file specification is used exactly as typed in
an NLST operation, the results of which are saved by the FTP program to be used
in successive RETR operations. Note that the string used as the NLST argument
starts immediately after the = or ←, if any, or after the space terminating the
RETR or GET command name. In particular, any extra spaces will be sent to the
remote host. The remote file specification in the typed command is not used to
determine local file names; instead, the rules above are applied to each remote
file specification received from the NLST operation. If an explicit local
filename or extension is provided by the user, it will be used instead of the
one derived from the remote filename, as in the command
GET *.TXT=<IGNORED>*.THIS-NAME-IS-REPLACED-BY-TXT-LOCALLY
Multiple RETR depends on the remote host implementing NLST. At present this
command is implemented in both TENEX and ITS. TOPS-10 systems vary in which
commands they implement. Other systems may have a filename syntax which does
not follow the rules above, in which case none of the features in this section
will work.
The PICKUP command can be used to continue a multiple transfer which is
interrupted either by a transient network failure or by a user error (e.g.,
attempt to write into a protected file). The command permits the transfer to be
re-entered along with the (local) name and extension of the file with which the
transfer should resume.
Suppose that you are trying to copy a complete directory from another system,
let's say a TENEX, so you give the command
RETR <FOO>*.*
After several files have been retrieved, the connection is broken, while in the
middle of copying <FOO>PARTIALLY.COPIED into PARTIA.COP in your directory. You
re-establish the connection, and type
PICKUP PARTIA.COP
at which point you are invited to repeat the RETR command, which will ignore all
files presented by the remote host until one comes along which matches the name
PARTIA.COP, at which point it begins actually reading files.
If the multiple transfer is stopped because of an error which does not break the
network connection, so you can continue using the same FTP, you can give the
PICKUP command without a filename argument, in which case the last filename for
which a transfer was attempted is used. Also, after the PICKUP command, you can
just type <return> instead of repeating the STOR or RETR command, and the last
such command given will be repeated. The last transfer must have been a
multiple STOR or RETR.
If the PICKUP command line ends with <alt> instead of <return>, the first file
transferred will be the one after the one in the argument (or the one after the
one remembered from the aborted transfer). This is useful for the case of a
transfer which cannot be done because of a protection violation, when you want
to continue the multiple transfer, skipping the protected file. In a situation
like that, you may not know the name of the first file you want to transfer, but
only the name of the last file you don't want to transfer.
If a PICKUP command is given after a transfer which is not multiple but for
which an implicit local filename was used, e.g.,
RETR <FOO>FILENAME.EXTENSION
which implicitly specifies FILENA.EXT as the local name, then the PICKUP command
with no argument can be used to repeat the transfer.
A6.10 One-line FTP transfers
The format for using the FTP command to carry out a transfer all in one command
line is this:
FTP local ← {host} remote
FTP {host} remote → local
FTP local → {host} remote
FTP {host} remote ← local
The braces are really to be typed; they're not meta-symbols. The direction of
the arrow indicates the direction of the transfer; the first two examples
retrieve files from the remote host, and the last two store files at the remote
host. Therefore, the arrows may not be replaced with equal signs as in the
multi-command syntax. The pathnames may include * for multiple transfers.
Although there must be an arrow, either of the pathnames may be null, in which
case the other one will be used for both ends as in the RETR or STOR commands
with only one pathname.
Normally FTP will attempt to do the transfer in IMAGE mode. If you want ASCII
mode transfer, give the command as above, but with FTP/A instead of just FTP.
If the remote host will not accept the specified mode, the transfer is aborted
and you can try negotiating manually.
Other switches can also follow the FTP command: /R changes the mode for parsing
a single pathname from LPPN to RPPN; /T is like the TTY command in multi-command
FTP--it types the specified remote file on your terminal (no local pathname or
arrow is used with /T); /Q means don't ask for confirmation when overwriting a
file that already exists--just go ahead and overwrite the old version with the
new file.
After doing the transfer successfully, FTP will close the connection and exit.
So if you want to do several transfer commands, it pays to use the multi-command
syntax.
The host specification inside the braces can contain more than just a host name.
Many hosts require a login sequence before files can be transferred; the
parameters for this login are supplied in the host specification like this:
{hostname/user/acct}
This can be abbreviated to just {hostname/user} or {hostname}. If no acct is
given, no ACCT command will be sent; if no user is given, the commands
USER ANONYMOUS
PASS SAIL
will be sent. These are the standard FTP guest login for Tenex systems. If you
do include a user name, and the remote host asks for a password, you will be
asked to supply it with echoing off.
If you often use a particular host-user-acct combination, you may want to store
the information online instead of typing it in each time. To do this, include
in your OPTION.TXT file one or more lines of the form
FTP: {host/user/acct},{name:host/user/acct/pass},{host/user//pass}
As you see in the example, the format allowed in OPTION.TXT has more fields
allowed than the one typed in the command. One difference is that you can
include a password, if you don't mind taking the risk of storing your passwords
online. (You can have a password but no acct as shown in the last host in the
example.) Also, there is a "name" field which may begin the host specification;
if no name is given, the first field serves both as name and as host. The way
to refer to a stored host specification is to type {name↑} in the monitor
command line. Note that this name must exactly match the one in OPTION.TXT,
except for the case of letters. (Normally, a host name can be abbreviated to
enough letters to determine it uniquely.) For example, suppose the host SRI-KL
can be abbreviated SRI. Then these commands are equivalent:
FTP ←{SRI/NICGUEST}<NETINFO>LIAISON.TXT
FTP ←{SRI-KL/NICGUEST}<NETINFO>LIAISON.TXT
but if your OPTION.TXT file contains the line
FTP:{SRI/NICGUEST}
your command must be {SRI↑} and not {SRI-KL↑}.
A7 CARE AND FEEDING OF DEVICES
A7.1 DECtapes
To mount a DECtape, first assign an available drive. Drives are identified to
the system by a rotary switch labeled 1,2,...,8 corresponding to DTA1, DTA2,
etc. Although there are eight numbers on the switches, there are only four
drives, and the system will not recognize DTA5 and up. Generally you should
have no reason to change the normal setting of these switches. Place your tape
on the left reel of the drive and thread the tape over the top of the tape guide
and head assembly. Wind several turns of the tape onto the takeup reel (turn
the reel clockwise). Finally flip the OFF-WRITELOCK-WRITE switch to WRITE LOCK,
or if you want to write, to the WRITE position.
To unload the tape, wind the tape off the takeup reel by the direction switch
(push it to the left and hold it). Turn the drive off when all the tape is on
the left reel. Grasp the reel firmly and pry it off the hub.
A7.2 Magnetic Tapes
Our magnetic tape drives are seven-track. They are capable of operating at
densities of 200, 556, and 800 bits per inch; the default is 556. DART always
uses 800 bpi.
First, decide whether you want to write on the tape or not. If you intend to
write, place one of the plastic write-enable rings in your tape. Place your
tape on the top hub and twist the handle in the hub clockwise to tighten the
reel to the hub. (You can really lose if you don't tighten it all the way!)
Between the two reels there is a three-position switch labeled START-BRAKES.
Move the switch to the right and hold it there to release the brakes on the
hubs. Unwind the tape until the end of the tape is about a foot from the floor.
Carefully thread the tape into the slot between the reels to the left of the
brake release switch. Wind the tape onto the bottom reel (wind the reel
clockwise). You must be holding the brake release switch to the right to wind
the tape. Wind several feet of tape onto the takeup reel until you see the
metal foil load point marker go by. Make sure there is no slack in the tape and
then push the brake release switch to the left (the START position). The tape
will hiss and spin. Hold the switch in START until all motion stops.
There are some control buttons on the top panel. One is labeled (and lighted)
REMOTE-LOCAL; this button toggles. In LOCAL mode, push the REWIND button. If
you're not sure that you have the load point marker on the takeup reel, push the
FORWARD button for several seconds to wind the tape forward onto the takeup reel
until it passes the load point marker, then REWIND. REWIND positions the tape
at load point. Set the drive in REMOTE and it is all set to use.
Unloading the tape is simple. In LOCAL mode, push the REWIND button. When the
tape is finished rewinding, push the brake release switch and manually wind the
tape onto the top reel. Unscrew the hub and remove the reel.
The magnetic tapes are quite finicky and the system software is somewhat flaky.
There are several things that you can do with mag tapes that will upset the
timesharing system and require the intervention of a wizard who will be angry at
you for disturbing his slumber. Never stop your job when it is operating the
tape by typing CALL. Instead, the job can be stopped by causing the magnetic
tape to appear hung. This is done by switching back and forth between REMOTE
and LOCAL until the system stops the job.
There is a reset button for each tape drive located behind the small front panel
below the drive mechanism. This button clears all tape motion functions in a
reasonable way.
A7.3 XGP: Xerox Graphics Printer
The normal condition of the XGP is indicated by the green ON light and the
orange READY light being on. If all indicators are off, the XGP main power has
been shut off inside the cabinet, possibly for some reason. Please do not try
to fix the XGP unless you have been officially shown how to do the particular
task necessary. This includes changing the paper or web. It is easy to screw
up the XGP. To be trained on XGP maintenance, just ask a wizard.
If the red OFF light is on, push the ON light. This will turn the XGP on,
unless some abnormal condition obtains, such as a paper jam near the cutter.
If the orange STANDBY light is on or if the READY light is off, look inside the
panel above these indicators. The following is the normal state of the
indicators and switches within:
Knobs: TEST PATTERN: OFF
VERTICAL POSITION: leave this one alone
Lights that should be on:
All POWER SUPPLIES lights
(except 10kv and 2.5kv lights will
be off any time there is some other
problem)
All PROCESS INTERLOCK lights
All CONTROL LOGIC (except IN SYNC)
Lights that should be off (all are labelled "not used"):
All SUPERVISORY SIGNALS
FAULT
IN SYNC
Certain conditions of the XGP are indicated by lights being OFF. (If any of the
conditions listed below obtains, the 10kv and 2.5kv power supplies will shut
off.)
FWT Filament wait timer has not run long enough after
being turned on. Wait 2 minutes.
FUSER The fuser is not hot enough.
If the XGP has just been turned on, wait 5 minutes;
otherwise, reset the over-temperature sensor.
The over-temperature sensor is reset by a small
black button located somewhere in the middle of the
fuser wick assembly.
WEB CLEAN
The drum cleaning web must be replaced.
PAPER OUT
Load more paper.
DRUM The drum assembly has been disengaged.
SWEEP PRESENT
The interface is not providing a sweep signal.
This may mean the connector is unplugged or the
interface turned off.
To load a new roll of paper, open the left door of the XGP. Unscrew the roll
retainer and remove the old roll. Unwind a foot of paper from the old roll and
then cut the paper at the roll. Mount the new roll, screw the roll retainer
back on, and then tape the front end of the new roll to paper separated from the
old roll. Make the leading edge of the joint as smooth as possible. Using the
MOTOR MANUAL DRIVE button, advance the splice through the machine until it has
passed the cutter.
If any problems develop in this sequence, find a wizard. Beware: certain parts
of the XGP are hot; you can be painfully burned if you touch the wrong things.
There is a drum cleaning web that runs out at inconvenient times. There is a
small diagram inside the XGP explaining how to change the web.
Toner is icky black stuff that makes the marks on the paper. It gets used up
and runs out too. Someone is supposed to check the toner every day and add more
if it gets too low. If the XGP runs out of toner, the pages will start getting
lighter, there will be occasional black splotches on the paper, and frequent
sand-like particles will be found embedded in the paper. Toner is checked
through the access panel in the back of the XGP. There is a lever there that
adjusts the rate at which toner is used on the paper. This lever must be placed
either at the lightest (inner) setting or one setting darker. Never, never set
it anywhere else.
If you don't like the copy quality, complain to a wizard. Don't adjust things
yourself.
A7.4 UDP: User Disk Pack
One or more of the drives in the disk system are usually reserved for private
disk packs, called user disk packs or UDPs. Any drives so designated will bear
a green marker card labeled UDPn, where n is 1,2,3.... There are three things
you have to do in order to use a UDP. (If the disk pack you want to use is
already spinning on a drive, you can skip steps 1 and 2 below and go right on to
step 3.)
(1) Remove the previous disk pack, if any, from the drive, after making sure no
one is using it. (If there is no pack on the drive, you can go right on to step
2.) To see if anyone is using UDPn, give the RESOURCES command; if this command
lists UDPn free, then you are allowed to remove the previous pack from that
drive. To unload the pack, first make sure there is nothing on top of the clear
door of the drive. Then push the START-STOP switch to STOP. When the pack
comes to a stop, press the OPEN DOOR switch; the door will swing up. (If it
doesn't, push down lightly on the door and it should open.) Take the top cover
whose label corresponds to the label on the pack and place it carefully over the
pack, pushing down gently until you're sure it won't go down any further. Turn
the handle counter-clockwise until it moves freely. Lift the pack straight up
out of the drive, and gently close the door to the drive until it locks. Place
the bottom cover under the pack and press it on until it latches (it may help to
squeeze the bottom release as you put it on). The covers help keep dust off the
packs. Return the pack to the storage rack, with the label facing outwards.
(2) Before you mount your pack, you must make sure that the UDP is free, even if
you already did that once in step 1 above. Now that no pack is mounted on the
UDP drive, give the RESOUCES command and make sure it still says UDPn free for
the particular drive you're about to use; if it doesn't say that, don't mount
your pack, or else it may get clobbered with data intended for some other pack.
If UDPn is free, mount your pack by following this sequence. Make sure there is
nothing on top of the clear door of the drive you are using. Then push the
OPEN DOOR switch and the door will swing up. Hold your pack by the handle on
its top cover and remove the bottom cover from the pack by squeezing the two
handles on the bottom together. Place the bottom cover on top of the back part
of the drive cabinet. Place the pack (still in the top cover) in the drive
unit, gently lowering it straight down on the hub in the middle. Make sure that
the pack is all the way down by gently rocking the cover to see if it will go
down any further. Now turn the cover's handle clockwise. It will be slightly
stiff to turn. Turn until it stops, but do not tighten any further; the stop
will be very obvious. Now carefully pull the top cover straight up off the pack
and gently close the drive door until it locks. Place the pack cover on the
bottom cover, making sure the two covers are aligned to keep dust out of the
enclosed space. Turn the empty covers so that the label on the top part is
visible from the front of the drive. Push the START-STOP switch to START; the
pack will begin to spin. When the green ready light comes on, the pack can be
used. There is a READ ONLY-R/W switch on the drive; put this switch in the
READ ONLY position if you do not intend to write anything on the pack and put it
in R/W (Read/Write) if you do intend to write on the pack.
(3) Now that your pack is mounted, you must assign the UDP with the command
ASSIGN UDPn. This should never be done before removing the previous disk pack
from the drive because that can cause the system to get confused about which
pack is mounted, with the possible result of your pack getting clobbered with
data intended for the previous pack. For details of the ASSIGN command and its
different forms, see page 51.
After you have finished using the UDP, you should deassign it with the command D
UDPn. This will allow others to use the drive with their own packs. You should
also put your pack away if you don't expect anyone else to use it.
Occasionally, there may be no drives available for user disk packs. If this
happens, a wizard will explain why. Never touch a disk drive bearing a red
marker card! All user drives have green cards bearing a UDPn indication. If
you are confused by something you see, ask about it before you touch!
A8 MONITOR ERROR MESSAGES
This appendix explains the error messages typed by the WAITS monitor itself (not
by system programs). Many have to do with errors induced by UUOs in your
program, for which you may want to see the UUO Manual writeup of the UUO
involved. The list is alphabetical; messages which start with a variable part
are sorted under the first fixed word.
Note: Several of these messages are of the form XXX at user <address>. It is
possible in some of these cases to get XXX at exec <address> instead, which
means that the offending instruction was not in your program, but in the
monitor, which was trying to do something on your behalf when it happened. If
this happens repeatably, or if the message is shortly followed by a system
crash, tell a system programmer.
Address check for Device <dev>
Your program was trying to use the indicated device, and supplied a
buffer address, dump mode command address, or other address which is
outside the bounds of your core image. For dump mode IO, the command
list is too long or contains a loop, or the address of a word in the
command list is illegal, or the address pointed to by a word in the
command list is illegal (possibly because it points into a
write-protected upper segment). In buffered mode IO, the buffer
header address is illegal or the buffers themselves are improperly
formed.
Address out of bounds, UUO at user <address>
Your program executed a UUO which takes as an argument an address in
your core image, and the address was out of bounds. The address given
is that of the offending UUO.
All of the user's TTYs are busy
You gave a TALK command with a programmer name as argument, but each
terminal in use by that person is unavailable for TALKing to. You
should probably SEND the user a message asking that he TALK to you.
Already assigned to job <job number>
You typed an ASSIGN command, and the device you wanted is in use.
Already attached!
You gave an ATTACH command with your own job number as argument.
Already in use - can't change format
You gave an ASSIGN PUBLIC or ASSIGN PRIVATE command for a UDP which
was already assigned as OLD, or vice versa. The UDP will be assigned
to your job in the same mode as before.
Already in use - can't make private
You gave an ASSIGN PRIVATE or ASSIGN OLD command for a UDP which was
already in use by another job. The UDP will be assigned to your job
as PUBLIC.
? ambiguous job name
Your program gave a UUO which refers to another job by name, and there
are two or more jobs with that name. If you type CONTINUE, the UUO
will be tried again.
Attaching job <job number> away from <TTY name>
You gave an ATTACH command to attach a particular job to your
terminal, and that job was formerly attached to the terminal given in
the message. A message has been typed on that terminal saying who
attached its job away.
Attempt to initiate SPW job with one already running
Your program has a spacewar module active and is trying to start
another one.
;; Autologout
Your job was idle too long and has therefore been logged out
automatically. Autologout is described on page 5.
Bad directory for Device <dev>
The device is a DECtape. This might mean that the tape is in a format
not recognized by the monitor. (Our system uses a different directory
format from the PDP-10 standard.) It can also happen if you try to
write on a write-locked DECtape. Or it can happen if the DECtape
drive isn't working very well (this is typical of our DECtapes).
Bad retrieval
The pointers to a disk file you tried to reference are invalid. See a
system programmer to try to fix it, or report the filename via GRIPE.
Buffer too large for Device <dev>; UUO at user <address>
Your program is trying to use an I/O device for which there is a limit
on the allowable user buffer size, which you exceeded. The UUO Manual
explains the rules for each device.
busy
You gave a TALK command addressed to a terminal which is not available
for talking. See the TALK command on page 53.
;; Bye from PRG
You are in a TALK ring which formerly had at least three people. One
of these people, the one named in the message, has left the ring.
Can't attach device
You gave the privileged ATTACH <device> command and don't have the DEV
privilege.
Can't Attach job
You tried to attach a system phantom job (one which is not logged in).
This requires the ATT privilege unless you are logged in with the PPN
of the phantom (attaching a SYS phantom always requires the ATT
privilege).
<dev> can't be reassigned
You gave a REASSIGN command in which the device to be reassigned was
your own terminal. This is illegal.
Can't continue
You typed CONTINUE after one of the other error messages came out, and
you are not allowed to continue the job after that error. You also
cannot continue a job after a SAVE or SSAVE.
Can't detach device
You gave the privileged DETACH <device> command and don't have the DEV
privilege.
Can't detach TTY. Use "TTY NO EXIST nnn" instead.
You gave a DETACH <TTY name> command, but the DETACH command cannot be
used with terminals. Instead you can use TTY NO EXIST as shown. This
should generally only be done by wizards or their helpers.
Can't ENTER or RENAME MFD
If you get this message, see a system programmer, who will eat you.
Can't FINISH phantom.
You gave a FINISH command with a job number argument, and the job is a
system phantom job. This requires the ATT privilege.
Can't LOCK with segment
Your program, which has an upper segment, gave a LOCK UUO. This is
illegal.
CORE DEADLOCK.
The monitor's free storage area has expanded enough so that user core
is no longer big enough for your core image. This shouldn't happen
unless we are running with reduced memory. If it does happen, it
might fix itself if you wait a while, but if you must run immense
programs your best bet is to come back at 4am.
Couldn't get you a segment. Will try to let you win with SETPR2.
You tried running a program with an upper segment. The program was
loaded into core, but there is no room in the monitor's job tables to
make an entry for the upper segment. The monitor will try to simulate
an upper segment for you by leaving the upper segment code in your
lower segment, but simulating upper-segment relocation by the SETPR2
UUO mechanism. This ought to work okay for most two-segment programs,
but just in case it doesn't the monitor types this warning. If you
are writing a two-segment program, consult the UUO Manual or a system
programmer for advice.
Couldn't unpurify upper. Continue to try anyway
You typed a DDT command. JOBDDT in your core image points to an
address in your upper segment as the DDT starting address, and your
upper segment is write protected. DDT and RAID both contain
instructions which modify themselves. The monitor tries to solve this
by unprotecting your upper segment. If you are sharing the segment
with other users, it has to load a new copy for you so the other users
still have a protected one. This might fail, for example, because
there are no job slots available, or for other reasons.
<dev> deassigned, but still INITed
You gave a DEASSIGN command for a device which is in use by your
program. This is all OK; the monitor is merely reminding you that you
still control the device. The FINISH command will release it, if that
is what you want.
Detached from system
You gave the PJOB <dev> command and the device you specified has been
made unavailable to users, perhaps because it is not working.
Detaching job <job number>
You gave a command to attach to a job although you were already
attached to another job. Your old job, whose number is given here, is
detached for you before the new job is attached.
Device <dev> isn't ready
The device is somehow disabled. If it's a mag tape, it may be in
LOCAL mode. You can fix the problem and type CONTINUE.
Device <dev> may be unloaded
You gave a DEASSIGN command for a UDP, or your program released the
UDP, and no one is now using the UDP so you can unload the pack.
? Device <dev> not available
The device specified in a RUN, R, GET, SAVE, or SSAVE command was
unavailable to your job.
Device <dev> still in use - DON'T unload
You gave a DEASSIGN command for a UDP, or your program released a UDP,
but the UDP is still being used by someone.
Disk is FULL!
Your program is trying to write a file on the disk, and there is no
more free disk space. If you delete some files (using another job!),
you can then type CONTINUE to resume your program, although it will be
given the error return for the UUO that was being tried.
DISK TRANSMISSION ERROR
This is a disk failure. See a system programmer.
Enter failed.
The filename you typed to "Enter needed." (see below) didn't work,
probably because of a protection failure.
? Enter failed
The file specified in a SAVE or SSAVE command cannot be written,
probably because of a protection failure.
Enter needed. Please type file name:
Your program tried to write on the disk or a DECtape without doing an
ENTER UUO to specify the filename. You are given the opportunity to
specify a file.
ERROR IN DSKSER
Horrible error in the monitor disk service routine. See a system
programmer.
? Error in job <job number>
This message will appear along with one of the others. The only
reason you might need it is if you are running more than one job at
once (through a PTY, for example).
Error in monitor
This message sometimes occurs if you have clobbered your buffer
headers for IO in buffered mode. If it is followed closely by a
system crash, call a systems programmer.
File already exists. Is it OK to delete it?
The filename you typed in response to "Enter needed." (see above)
already exists. If you type Y (and RETURN), it will be replaced with
the new output; otherwise, you will be asked for another name.
Finish what?
You typed a FINISH command with an argument and weren't using that
device (or there is no such device).
Gotcha!
This is not an error. You get it when you are in a device wait queue
and your turn for the device comes.
Halt at user <address>
Your program executed a JRST 4, instruction. You are allowed to
CONTINUE the job after this message. The address typed is the address
containing the HALT instruction, not its effective address. If you
type CONTINUE, the program will be continued at the address specified
in the effective address of the JRST 4,.
Hung Device <dev>
The device did not respond properly to your attempt to use it in some
predetermined time. This probably means that the device is unusable
for some hardware reason.
I-level UUO when not at I-level, UUO at user <address>
Your program tried to execute a UUO which is only allowed in a user
interrupt routine, but your program was not at user interrupt level at
the time.
Ill mem ref at user <address>
Your program tried to read or write an address greater than the size
of its core image. The offending instruction is at the address typed,
or possibly at one beyond that address (e.g., if the error occurred on
a non-final write cycle of a BLT instruction).
Illegal attach loop
Your program is typing into a pseudo-teletype and gave an ATTACH
command trying to attach its controlling job. For example, people
using the system via the network get this if they try to attach to
their Telnet server job.
Illegal data mode for Device <dev>
Your program has tried to use an I/O device in an undefined way, e.g.,
binary I/O to a terminal. The UUO Manual discusses data modes for
each device.
ILLEGAL DD CHANNEL.
Your program is trying to use a Data Disc channel to which it is not
allowed access.
Illegal ESCAPE/BREAK char in PTWR1S/W UUO
Your program tried to use a no-longer-supported feature of the PTWR1S
and PTWR1W UUOs. ESC and BREAK commands should now be done by using
the TTYSET UUO.
ILLEGAL FORMAT DUMP MODE COMMAND LIST
Your program is trying to do dump mode I/O incorrectly. See the UUO
Manual.
Illegal I-level call, UUO at user <address>
Your program executed at interrupt level a UUO which is not legal at
interrupt level.
ILLEGAL INSTR. ADDRESS.
This message refers to instructions in a display program your job is
running.
Illegal instruction at user <address>
Your program executed an undefined instruction or one which is not
allowed in user mode.
Illegal old-style access to new format UDP. UUO at user <address>
You have given an ASSIGN OLD command for a UDP, and mounted a pack
which has been formatted for file-structured use, and your program
tried to write on the pack (gave an ENTER UUO). You can't write
new-format UDPs in OLD mode.
ILLEGAL PAGE SIZE SPEC.
You are trying to adjust the page printer geometry incorrectly on a
display terminal.
ILLEGAL PIECE OF PAPER
Your program gave a PPIOT UUO which specified a piece of paper number
greater than 17 (octal). See the UUO Manual.
Illegal protection code
You gave a SETUWP or CLRUWP command with an argument greater than 1000
octal.
Illegal socket in terminate
Your program accessing the network tried to close a connection but
gave an invalid argument.
Illegal UUO at user <address>
Your program executed a UUO which the monitor does not recognize.
Possibly the UUO is privileged and you are not, or you may be trying
to execute data.
Illegal user socket
Your program is trying to access the network but gave an improper
socket number. See the UUO Manual for which socket numbers are
available to each job.
IMP I/O without Request For Connection
Your program tried to read or write data over the network but failed
to open a proper connection first.
in use
You gave the FLUSH command but the specified terminal is in use. You
can flush it anyway if you first say ENABLE UPG.
In use, will be detached when available.
You gave the DETACH DDnn! command to detach a DD channel from the
system, but that channel is currently in use. When it is freed up by
its current user, it will be detached automatically.
Input Device <dev> cannot do output
Your program has done something silly like trying to write on the
paper tape reader.
Input Device <dev> has no input buffer header, UUO at user <address>
Your program executed an input UUO in buffered mode but had not
provided an input buffer header when it opened the device.
Interrupt address out of bounds
Your program has enabled user interrupts but specified an interrupt
address which is not in your core image.
Interrupt enablings conflict, UUO at user <address>
Your program tried to enable both old-style and new-style interrupts
in a conflicting manner.
Intgen of non-enabled interrupt, UUO at user <address>
Your program tried to use the INTGEN UUO to send itself or another job
an interrupt for which the job was not enabled.
I/O to unassigned channel at user <address>
Your program executed an I/O UUO specifying an I/O channel which was
not opened. See the UUO Manual about channels and I/O.
<dev> is busy, will you wait?
Your program tried to open a device which another job is using. If
you say Y (then RETURN), your job is placed in a queue of jobs waiting
for the device, and will be continued automatically when it's your
turn. If you say N, you are then asked "Would you do IO to the disk
instead?" and can again say Y or N. If you say Y, you may be asked
for a filename (if your program does input or output on that channel
without specifying a name). If you say N again, your program gets a
failure return on the INIT or OPEN UUO.
JMS NOT LEGAL; USE JSR.
Your program set up a III display program with the forbidden JMS
instruction in it. See the UUO Manual.
Job capacity exceeded
The maximum allowable number of users are already logged in. Try
again later.
Job too big to LOCK in core
Your job tried to execute a LOCK UUO but is too big to fit in the
lockable part of core. Shouldn't happen unless we are running with
reduced memory.
;; Link broken
You were in a TALK ring with one other person and that person
terminated the ring.
Logical name already in use, <dev> Assigned
You typed an ASSIGN command with a logical device name argument which
you were already using for another device. The device you requested
is assigned to your job, but the logical name still refers to the old
device.
Login please
You typed a command which requires that you be logged in to use it.
Lookup failed.
The filename you typed in response to "Lookup needed." (see below)
could not be read. (It doesn't exist or is read protected against
you.) You will be asked to type in another name.
Lookup needed. Please type file name:
Your program tried to read from the disk or a DECtape without
specifying a file by executing a LOOKUP UUO. You are given the chance
to specify the file to read.
Message length inconsistant with byte size
Your program was attempting to read input from the network and got a
net message whose length was not a multiple of whole bytes.
Must assign Device <dev>; UUO at user <address>
Your program tried to INIT a UDP which hadn't been ASSIGNed. You must
give the ASSIGN command to set the mode of pack to be used before you
can use a UDP.
Must specify TTY C100A or TTY C100B or ...
You gave the TTY C100 command, but since there are different types of
support for C100s, you must specify which type you (think you) have.
NCP already alive
Your program tried to bring the system Network Control Program up but
it was already up.
NEED ENTER BEFORE OUTPUT
NEED LOOKUP BEFORE INPUT
You get these messages if your program opens a directory device,
closes a file, and then tries to do input or output on that channel
without another LOOKUP or ENTER.
No <dev>'s available
You typed an ASSIGN command with a generic device name (e.g., MTA),
and all such devices are in use.
No core assigned
You typed a command which refers to your core image (e.g., DE or
START), and you don't have a core image.
No DDT
You typed a DDT command, and your core image does not contain DDT,
RAID, or BAIL (JOBDDT is zero).
No other detached jobs with same PPN.
You typed the ATTACH command with no argument, trying to attach a
detached job of yours, and there was no such job to attach.
No Reenter address
You gave a REENTER command and your program has no REENTER address
(JOBREN is zero).
No starting address
You gave a START, R, or RUN command and the program has no starting
address (JOBSA is zero).
No such device
You gave a device name but there is no device with the name you gave.
No such job
You gave a command with a nonexistent job number as argument, e.g.,
ATTACH, KILL, or TTY WHO.
No such privilege
The privilege name specified in an ENABLE or DISABLE command does not
exist.
No such TTY number
You gave a TALK command with a TTY number higher than the biggest TTY
number.
No upper segment
You typed a SETUWP or CLRUWP command and your core image does not
include an upper segment.
? Non-ex job name or number
Your program gave a UUO addressed to a nonexistent job. If you type
CONTINUE, the UUO will be tried again.
Non ex mem at user <address>
This means that your program tried to reference a word of physical
core storage which does not exist. This can happen if your program
uses the GETHI UUO to map particular pages of physical core into its
upper segment, including some physical page that doesn't exist. But
normally, this should never happen.
? not a dump file
The file specified in a RUN, R, or GET command is not in dump file
format.
NOT A NEW FORMAT UDP
You have typed an ASSIGN PUBLIC or ASSIGN PRIVATE command for a UDP,
and mounted a pack which has not been formatted for file-structured
use. The error is not detected until your program tries to perform
some operation on the UDP. See a system programmer about formatting
your pack.
Not a TTY
You gave the FLUSH command with an argument which is not the name of a
terminal. (Might be a nonexistent TTY number.)
<dev> not available
You gave a RUN, R, GET, SAVE or SSAVE command with a specific device
name, and that device is in use by someone else and not available to
you.
Not enough core
You typed a CORE command with an argument greater than the maximum
core currently available to a user job.
Not enough free storage for TV camera
Your program tried to use the TV camera (device TV) and there is not
currently enough free storage to hold a complete picture. Maybe
you'll succeed later.
? <filename> not found
The file specified in a RUN, R, or GET command was not found. If the
problem is not a spelling error, make sure you are not aliased.
Out of bounds
Some numeric argument to a monitor command wasn't right. This could
be an address not in your core image in a DE or E command.
Output Device <dev> cannot do input
Your program has tried to do something silly like read the paper tape
punch.
Output Device <dev> has no output buffer header, UUO at user <address>
Your program executed an output UUO in buffered mode but did not
provide a buffer header when it opened the device.
? <n> pages of core needed
You tried to run a program and asked for less core than it needs to
run or for more core than a single job can have. In either case, <n>
is the minimum amount of core (in 512-word pages) needed to run the
program, unless the program was on a mag tape, in which case <n> is
the amount of core you asked for and is more than you can have.
Parity error in your core image at location <address>
Parity error in your upper segment at location <address>
A hardware failure has invalidated the contents of the indicated
address in your core image. The safest thing to do in this case is to
restart with a fresh copy of your program. If you were running for a
long time and are willing to risk continuing, you can type CONTINUE.
You can also try to fix the bad location with DDT or RAID, if present,
or with the DE and E commands.
PC exceeds mem bounds at user <address>
Your program tried to jump to an address outside the range of your
core image. The message, unfortunately, tells you the illegal address
rather than the address of the jump instruction.
Pdl ov at user <address>
Your program had a pushdown list overflow. The address typed is the
effective address of a PUSHJ, the return address for POPJ, or the
address following a PUSH or POP.
PIECE OF GLASS TOO BIG
Your program is trying to run a display program which is too big for
the monitor to handle.
Please Kjob or Detach
You gave a LOGIN command when you were already logged in.
Please specify a TTY device name or user name
You gave a TALK command with a name that can't be interpreted. TALK
accepts only a programmer name or a TTY device name as its argument.
Please specify which TTY to talk to
The programmer name you typed as argument to the TALK command is
logged in at more than one terminal. You must give another TALK
command, using a particular TTY name as argument instead of the
programmer name.
Please type ↑C first
You started your program with CSTART or CCONTINUE, leaving your
terminal in monitor mode, and then typed a command which affects your
core image. Such commands cannot be processed while the program is
running. Type CALL and try again.
Please type HAL<cr> first
You were trying to log in or out when something got confused and you
tried to give a monitor command although LOGIN or LOGOUT is still
running. You must type the precise monitor command HAL<cr> in order
to stop the program.
Please use the SEND command and let the user link back to you
You gave a TALK command but are on a network terminal and not logged
in. In this case, the preferred technique is to request that the
logged-in user link back to you by himself giving the TALK command.
You can SEND the user a message requesting such a link back.
PPN mismatch
You typed an ATTACH, FINISH, RESET, or KILL command, and the job
number and PPN arguments did not agree.
Proprietary violation (Public bit set in PC)
Your program managed to set the Public bit in its PC, which causes a
fault of this type. Probably your PC flags got set randomly in a
buggy JRST 2, instruction somewhere.
Protection failure
You typed a SETUWP or CLRUWP command, and are not permitted to change
the write protection of your core image's upper segment.
? SAVE/GET IO error
You got an IO error from trying to save or get a core image. Try
again. If it still fails, ask a wizard for help.
Spacewar lossage - <error>
The error indicated can be "Ill mem ref", "PC exceeds mem bounds",
"Non ex mem", "Pdl ov", "Cons trap", or "Time out". It means that
your job started a spacewar module (see the UUO Manual), which caused
the error. "Time out" means that your spacewar module did not have
the timeout-suppression bit set and used up the maximum amount of
uninterrupted time allowed in a single run. For the other errors, see
the particular error message in this list for an explanation.
Spacewar request for P2, but P2 doesn't run spacewar anymore.
Your program is trying to run a spacewar module on P2 (the KA-10),
which no longer provides spacewar service. Spacewar is only available
on P1.
SWAP READ ERROR
Your job was swapped out of core, and when the monitor tried to read
it back in, there was a hardware error in reading the disk. Your core
image is probably gone forever. If you really need it badly, you
might be able to persuade a system programmer to try to recover it for
you, but even then there's not much chance. Start over.
Too few arguments
This error message can be typed by several different monitor commands
and should be self-explanatory.
TOTAL DPY BUFFER SPACE EXCEEDED.
Your program is trying to run a III display program, and there is no
more room in your allocation of display buffer space.
?TTY doesn't exist.
You gave a TTY <TTY name> command but the target TTY doesn't exist and
therefore cannot be twiddled.
TTY not in use
You gave a TALK command to a PTY which is not in use; you can
establish a TALK link to an unused physical TTY but not to a PTY.
UDP OFFLINE OR WRITE LOCKED
Your program has tried to perform some operation on a UDP, and there
is no pack mounted, or the drive is not turned on, or it does not have
its ID plug inserted in the front panel, or it is switched to
read-only and your program tried to write on it.
<dev> Unavailable, P2 not running
You tried to use a device that is on P2 (the secondary processor), but
P2 is not running currently so its devices cannot be used. See a
wizard if you really need to use such a device.
(Upper not saved)
You gave a SAVE command and you have an upper segment; SAVE does not
include the upper segment in the dump file written. To have the upper
saved also, use the SSAVE command. (You can give the SSAVE command
after getting this message from SAVE if you decide you want the upper
saved too.)
Use "KJOB" to log yourself out
You typed a KILL command with your own job number as the argument.
$$ USER DPY ERROR AT <address>
This message comes along with another which explains the error in your
display program. The address is that of the offending instruction.
User Interrupt-Level <error>
The error can be "ill mem ref", "NXM", or "pdl ov". See the
associated message in this list for an explanation (see Non ex mem for
NXM). The error happened in your program's interrupt routine. If it
says "CH3 error" instead of one of the above, see a system programmer.
User Interrupt-Level attempt to schedule, UUO at user <address>
Your program's interrupt routine executed a UUO which would put it in
a wait state. User interrupt routines aren't allowed to do that. See
the UUO Manual.
User Interrupt-Level timeout
Your program's user interrupt routine has run longer than the maximum
time allowed. (No other user can run while an interrupt routine is in
progress, which is why there is a time limit. See the UUO Manual
about interrupts.)
User not logged in
You gave a TALK command with a programmer name as argument, but the
given person is not currently logged in.
UUO at user <address>
This line appears with certain other messages. It tells you the
location in your core image of the instruction which caused the error.
<dev> wasn't assigned
You gave a DEASSIGN or REASSIGN command and hadn't assigned the
device.
wasn't detached
You gave the privileged ATTACH <device> command and have the
privilege, but the device wasn't detached.
WHOAMI attempted when another phantom already exists
Your program tried to tell the system that it was a particular system
phantom, but some other phantom job had already claimed that state.
Wrong syntax. Follow cmd with list of TTY numbers separated by commas.
You tried to use the syntax TTY <TTY name> <keyword> to do something
to the named terminal, but the TTY keyword you used doesn't take that
format of command. Instead, use the form suggested in the error
message.
YOU ARE LOCKED OUT OF CORE!
The amount of user core available has been reduced by other jobs
starting spacewar modules (thereby being locked in core). There is
not enough room to fit your core image. This condition may fix itself
quickly; the message does not return you to monitor mode, but will
keep appearing every so often until you fit again. This message is
very unlikely now that SU-AI has over 2 millions words of core.
You can't have it
You gave an ENABLE command asking for a privilege other than LIV, LUP,
or UPG.
;Your job has been <verb>ed by job <job number> on <TTY name>
Someone on the given terminal and job has applied the RESET, KILL,
ATTACH, or FINISH command to your job; the <verb> tells you which of
these has been done to your job.
A9 BIBLIOGRAPHY
This appendix lists various sources of information about system programs. Some
of these are available on the disk, some are printed. Some programs, which were
not written here but came from DEC, are documented in DEC manuals; see a wizard
to borrow a DEC manual if necessary. For other program documentation which may
be of interest, see the files: AIMS[BIB,DOC], AIMS.OLD[BIB,DOC],
SAILON[BIB,DOC], PRUNE.DAT[UP,DOC], and PRUNE.DAT[1,3].
Many programs are documented only in disk files and are not mentioned here. The
normal way of finding such online documentation for a program or concept is with
the READ command, e.g., READ DIRED to find out about the DIRED directory editor.
This edits the document file with E (which is most effective on displays). A
convention used in naming [S,DOC] and [UP,DOC] files is that the filename is the
name of the program being documented, and the extension is the programmer name
of the author. An update file for a program's documentation will have a file
name matching the program name with the extension being .UPD.
The specific monitor command READ HOW will edit the HOW file, which provides
introductions on the use of many system programs.
SAILONs (Stanford Artificial Intelligence Laboratory Operating Notes) and AIMs
(Artificial Intelligence Memos) are generally available in printed form from the
CSD publications office. Try to get printed versions of the manuals you need.
Please don't print long manuals yourself from their reference copies on the
disk.
SYSTEM MANUALS:
Monitor This current manual, the Monitor Command Manual, can be found in the
online reference version with the command READ MONCOM; the update
file can be found with READ MONCOM.UPD. A summary manual of usage
of WAITS can be found in printed form only in Short WAITS, Stanford
report number STAN-CS-81-839, by Arthur Samuel, about 30 pages.
UUOs Programmers should have a printed copy of the UUO Manual, SAILON
55.5, which describes the monitor interface for user programs; this
manual can also be referenced online with the command READ UUO, and
its update file can be found with READ UUO.UPD.
EDITORS:
E E.ALS[UP,DOC] is the manual for the display editor. Use the command
READ E or ET ? to read this online-only manual. A short manual of
the most important aspects of E is available in printed form only in
Essential E, Stanford report number STAN-CS-80-796, by Arthur
Samuel. A teaching file is also available for new users; give the
monitor command HELP ETEACH to start using the teach file--that's
one of the best ways to learn how to use E, which is by far the most
commonly used editor on WAITS.
SOS SOS.LES[S,DOC], SAILON 50.3, is the reference manual for SOS.
TECO There is a DEC manual which documents standard DEC TECO. The file
TECO.MRC[UP,DOC] documents the version run here, but you should read
the DEC manual first.
LANGUAGE PROCESSORS:
FAIL FAIL.REG[AIM,DOC], AIM 226, is the reference manual.
SAIL SAIL.KVL[AIM,DOC], AIM 204. This is a long manual; get the printed
version -- do not spool this file!
MACRO This is a DEC assembler. See the DEC documentation.
F40 This is the DEC FORTRAN. See the DEC documentation.
LISP Our main dialect, MACLSP, is described in LISP.RPG[S,DOC].
PUB PUB.TES[S,DOC], SAILON 70, describes the PUB Document Compiler. See
also PUB.UPD[S,DOC] for updates and tricks to using PUB.
DEBUGGERS:
RAID This display-oriented debugger is described in RAID.PMP[S,DOC],
SAILON 58.1.
DDT This debugger usually used on non-displays is a DEC program. See
DDT.REG[UP,DOC] for a quick summary.
BAIL The SAIL program debugger is described in BAIL.DOC[DOC,AIL], AIM
270.
A10 WAITS CHARACTER SET
The WAITS ASCII character set is displayed in the following table. The three
digit octal code for a character is composed of the number at the left of its
row plus the digit at the top of its column. For example, the code for "A" is
100+1 or 101.
ASCII 0 1 2 3 4 5 6 7
↓↓↓
000 NUL ↓ α β ∧ ¬ ε π
010 λ TAB LF VT FF CR ∞ ∂
SIXBIT 020 ⊂ ⊃ ∩ ∪ ∀ ∃ ⊗ ↔
↓↓ 030 _ → ~ ≠ ≤ ≥ ≡ ∨
00 040 SP ! " # $ % & '
10 050 ( ) * + , - . /
20 060 0 1 2 3 4 5 6 7
30 070 8 9 : ; < = > ?
40 100 @ A B C D E F G
50 110 H I J K L M N O
60 120 P Q R S T U V W
70 130 X Y Z [ \ ] ↑ ←
140 ` a b c d e f g
150 h i j k l m n o
160 p q r s t u v w
170 x y z { | ALT } BS
The tables below display the standard ASCII codes, and the SOS representation
used under WAITS for entering the full WAITS ASCII character set from
non-displays with restricted character sets. The obscure names for the ASCII
codes below 40 are listed just for confusion. Notes: "DEL" (177) is the ASCII
delete. "ESC" (33) is their alt mode. Codes 136 and 137 have two different
interpretations, as shown below. The SOS representation is so called because it
is provided by SOS, the non-display editor. Certain other programs also know
about this representation, but it is not built into the monitor in any way. See
also Section 3 for special system treatment of certain characters from
non-displays.
Standard ASCII
0 1 2 3 4 5 6 7
000 NUL SOH STX ETX EOT ENQ ACK BEL
010 BS TAB LF VT FF CR SO SI
020 DLE DC1 DC2 DC3 DC4 NAK SYN ETB
030 CAN EM SUB ESC FS GS RS US
040 SP ! " # $ % & '
050 ( ) * + , - . /
060 0 1 2 3 4 5 6 7
070 8 9 : ; < = > ?
100 @ A B C D E F G
110 H I J K L M N O
120 P Q R S T U V W
130 X Y Z [ \ ] ∧↑ _←
140 ` a b c d e f g
150 h i j k l m n o
160 p q r s t u v w
170 x y z { | } ~ DEL
SOS Representation
0 1 2 3 4 5 6 7
000 --- ?! ?" ?# ?$ ?% ?& ?'
010 ?( TAB LF VT FF CR ?) ?*
020 ?+ ?, ?- ?. ?/ ?0 ?1 ?2
030 ?9 ?6 ?4 ?= ?< ?> ?7 ?8
040 SP ! " # $ % & '
050 ( ) * + , - . /
060 0 1 2 3 4 5 6 7
070 8 9 : ; < = > ??
100 @ A B C D E F G
110 H I J K L M N O
120 P Q R S T U V W
130 X Y Z [ \ ] ↑ ←
140 ?@ ?A ?B ?C ?D ?E ?F ?G
150 ?H ?I ?J ?K ?L ?M ?N ?O
160 ?P ?Q ?R ?S ?T ?U ?V ?W
170 ?X ?Y ?Z ?[ ?: ?3 ?] BS
A11 MONITOR COMMAND SUMMARY
On the following pages, the monitor commands are listed first alphabetically and
then by function. In the alphabetical list, the command name is printed with
the minimum necessary unique abbreviation capitalized and the rest of the name
in lower case. The list provides a brief description of the purpose of each
command along with the arguments for some commands; included is a page reference
to the command's complete discussion in this manual. If the command loads a
program into your core image, the program's name is listed. The following
abbreviations are used:
phydv physical device name
dv logical or physical device name
prj a project name
prg a programmer name
sa octal starting address; if omitted use normal starting address
cor decimal number of 512-word pages to assign to this program
lh octal left half word
rh octal right half word
adr octal address
jn decimal job number
fn a file name (may include project-programmer name)
host a network host name
prot octal protection code
phone telephone number, format {(ddd)}ddd{-}dddd
priv privilege name
→ first program listed automatically loads the next
⊗ program to be loaded is specified as argument
{...} enclose optional argument
| separates alternative arguments
- no arguments for this command
* privileged version of command
Command Program Arguments Page Description (* means privileged)
@ ATSIGN 86 make cross-reference listings with ATSIGN
ACcess ACCESS prj{,prg} 86 access a user file directory
ADvance DART 148 mag tape positioning
ALias prj{,prg} 53 set disk PPN
Assign phydv {dv} 51 assign device to job
ATtach jn{[prj,prg]} 50 attach job to TTY
ATtach jn{[prj,prg]} 87* attach phantom job and log it in
ATtach dv 87* attach device to system
BACkspace DART 148 mag tape positioning
BATch MAIL 141 schedule delayed command execution
BEep - 87* beep all terminals (from the CTY only)
BOok E {fn} 89 edit with E in book mode
BRoadcast - 87* accept Ethernet broadcasts
CAncel CANCEL - 145 delete reminders
CContinue - 49 continue job, TTY in monitor mode
CDetach - 50 continue job, detach TTY
CEtv E fn 89 create file with E
CFork - 50 continue job, detach TTY, make new job
CKmail CKMAIL prg 146 see if a user has new mail
CLRUWP {prot} 48 clear upper segment write protect
COMpile SNAIL→⊗ 93 compile programs
CONtinue - 49 continue job, TTY in user mode
COPy COPY 108 copy files
Core {cor} 48 set or type core size
CREAte SNAIL→SOS fn 89 create file with SOS
CREF SNAIL→CREF - 104 make cross-reference listings with CREF
CStart {sa} 49 start job, TTY in monitor mode
CTyset 87* select alternate or main CTY
DAytime {jn} 52 type time of day or job times
DCaavg - 87 type averages for DCA interrupts
DDt - 49 enter DDT or RAID
DE (deposit) lh rh {adr} 48 deposit into core image
Deassign {dv} 51 deassign device from job
DEBug SNAIL→⊗ 93 compile and load programs, start debugger
DECide ORACLE 86 ask the computer for advice
DELete COPY 113 delete files
DETach - 50 detach job from TTY
DETach dv 87* detach device from system
DFind FIND 74 find a word in the dictionary
DIAl DIAL dv | phone 86 talk to computer by telephone
DIrectory COPY 113 type file statistics
DISable {priv} 87* disable privileges
DO DO {fn} 61 execute commands from a file
DOVer SPOOL 119 print a file on the Dover
DQavg - 87 type out the disk queue average
DRd DIRED {[prj,prg]} 12 run directory editor
DSksiz DSKSIZ {prg} 85 find out disk usage and quota
DTn DTN site 159 DM simulator TELNET
DUmp DART 148 dump disk files to mag tape
E (examine) {adr} 48 examine core image
EDDt - 87* stop system, enter Exec DDT
EDit SNAIL→SOS {fn} 89 edit file with SOS
EFInd EFIND 84 find string in E-format file
ELfqfix - 53 fix a jammed ELF queue interlock
ENable {priv} 87* enable privileges
EOt DART 148 mag tape positioning
ERead E {fn} 89 edit file with E in readonly mode
ETv E {fn} 89 edit file with E
EVent MAIL 136 list an event in the system messages
EXecute SNAIL→⊗ 93 compile, load, and run programs
FIles {jn|fn} 52 type status of files in use
FIND FIND 74 find character string in a file
FINGer FINGER {prg} 85 type name and location of users
FINIsh {dv} 51 close and release device
FIXimlac FIXIML - 86 initialize IMLAC terminal
FLush dv 51 clear TTY buffers
FOrk - 50 detach, make new job
FRaid FRAID {fn} 86 examine or alter a binary disk file
FTp FTP host 162 run network file transfer program
Get ⊗ {dv} fn {cor} 47 load core image from file
GRipe MAIL 135 document system bugs
HAlt (or ↑C) - 49 stop job (↑C)
HELLo - 52 type name of current monitor version
HELP HELP {fn} 85 explain system program
HOSt HOST host 154 find out who a given network host is
HOT HOT - 86 read AP or NYT news wire
KAttach LOGOUT jn{[prj,prg]} 56 kill this job, attach another
KIll jn 53 kill another job
Kjob LOGOUT 56 kill this job
KLog LOGOUT→LOGIN prj,prg 56 kill this job, make another
LAter MAIL 140 run a program later
LISP LISP - 86 run LISP
LOAd SNAIL→⊗ 93 compile and load programs
LOCate DART 148 tell which dump tapes have file
Login LOGIN prj,prg 55 make a new job
LOGOut LOGOUT - 56 kill this job
MAIl MAIL 132 send mail to a user
MAKe SNAIL→TECO fn 89 create file with TECO
NAme MAIL prg 138 name a user and give forwarding address
NOBroadcast - 87* ignore Ethernet broadcasts
NOEdit - 29 user display terminal has no edit key
NS NS - 86 read AP or NYT stories
OFind FINE 74 find a string according to OPTION.TXT
OTn OTN site 155 old TELNET protocol
P2LOAD P2LOAD 87* reload P2
PDetach - 50 detach job and make it a phantom
PItime - 87 type estimated time in PI channels
PJob {dv} 52 type job using device or this TTY
PLAn MAIL 137 create plan file
PLIst DART - 148 list PUMPKIN requests
POx SNAIL→POX {fn} 91 compile document with POX
PPpn {jn} 52 print PPN of job
PREpare SNAIL→⊗ 93 compile, load programs with debugger
PROcess SNAIL→⊗ 92 execute command string
PROVe PROVE 86 run SYS:PROVE
PTty {jn} 52 type TTY attached to job
PUB SNAIL→PUB {fn} 91 compile document with PUB
PUMpkin DART 148 ask for offline file restore
Qspool SPOOL - 120 type spooler status and queues
QUit - 53 close any incoming network connection
R ⊗ fn {cor} 47 run program from [1,3] disk area
RCv RCV 147 receive mail for user
READ E {fn} 89 edit system document with E
REAP DART 148 mark files for Dart dumping and deletion
REASsign dv jn 51 assign device to another job
REEnter 49 start program at reenter address
REMind MAIL 134 create a reminder message
REName COPY 113 rename files or change protection
RER SNAIL→⊗ 92 run program from SYS, give it text lines
RERUn SNAIL→⊗ 92 run program from DSK, give it text lines
RESEt {jn{[prj,prg]}} 53 reset a job
RESOurces - 52 type available system resources
RESTore DART 148 restore files from dump tape
RETry MAIL - 139 try again to send queued mail
REWind DART 148 mag tape positioning
RUn ⊗ {dv} fn {cor} 47 run a program from core image file
SAve {dv} fn {cor} 48 save core image in a file
SD host 161 run SUPDUP display-telnet program
SENd MAIL 133 send message to user's TTY
SETUWP {prot} 48 set upper segment write protect
SPool SPOOL 115 request line printer listing
SSave {dv} fn {cor} 48 save two-segment core image
Start {sa} 49 start job, TTY in user mode
SUpdup/SD SUPDUP site 161 run SUPDUP display-telnet program
SYstat WHO - 85 type system status
TAlk dv 53 talk to another TTY
TECo SNAIL→TECO {fn} 89 edit file with TECO
TELnet/TN TELNET host 155 talk to network computer
TESt TEST 86 run SYS:TEST.DMP if it exists
TEX SNAIL→TEX {fn} 91 compile document with TEX
TIme {jn} 52 type runtime for job or system
TList DART 148 list files on a dump tape
TN host 155 talk to network computer
TRAnsfer COPY 113 copy files, delete source
TRY SNAIL→⊗ 93 compile, load with debugger, run
TTy 45 set TTY parameters
TUrkey DART 148 see who last used a DART tape
TYpe COPY 113 type a file
UDpufd UFD prj,prg 86 modify UDP file directory
UFd UFD prj,prg 86 modify DSK file directory
UNDelete UNDELE fn 86 try to recover deleted file
UNPRotect UNPROT fn 86 reduce protection of a file
UNPUmpkin DART - 148 undo PUMPKIN requests
UNReap DART 148 undo REAP requests
UNSpool SPOOL - 121 delete spooler request
VERify VERIFY 86 run SYS:VERIFY
WHEN WHEN prg 85 see when a user last logged out
WHEre WHERE {prj,}{prg} 85 type job info for PPN or job name
Who WHO - 72 display system status
XGplist COPY 113 list file on XGP
XPart XPART 119 prepare part of a file for XGP spooling
XSpool SPOOL 119 request XGP listing
Zero ZERO dv 71 clear DTA, UDP, or DSK directory
11LOad 11LOAD 87* reload the console-11
Commands that run programs:
SNAIL Class COPY Class TELNET Class DART Class Information
BOOK COPY DIAL ADVANCE DFIND
CETV DELETE DTN BACKSPACE EFIND
COMPILE DIRECTORY FTP DUMP FIND
CREATE RENAME HOST EOT FINGER
CREF TRANSFER OTN LOCATE HELP
DEBUG TYPE SD PLIST OFIND
DO XGPLIST SUPDUP PUMPKIN SYSTAT
EDIT TELNET REAP WHEN
EREAD TN RESTORE WHERE
ETV REWIND WHO
EXECUTE TLIST
LOAD SPOOL Class MAIL Class TURKEY Others
MAKE UNPUMPKIN
POX DOVER BATCH UNREAP @
PREPARE QSPOOL CANCEL ACCESS
PROCESS SPOOL CKMAIL DECIDE
PUB UNSPOOL EVENT DRD
READ XPART GRIPE DSKSIZ
RER XSPOOL LATER FIXIMLAC
RERUN MAIL FRAID
TECO NAME HOT
TEX PLAN LISP
TRY RCV NS
REMIND PROVE
LOGIN Class RETRY TEST
SEND UDPUFD
KATTACH UFD
KJOB UNDELETE
KLOG UNPROTECT
LOGIN VERIFY
LOGOUT ZERO
Other system commands:
SAVEGET Class START Class Other Information
CORE CCONTINUE ALIAS DAYTIME
GET CONTINUE BEEP DCAAVG
R CSTART BROADCAST DQAVG
RUN DDT CLRUWP FILES
SAVE HALT CTYSET HELLO
SSAVE REENTER DE PITIME
START DISABLE PJOB
Device Control E PPPN
ATTACH Class EDDT PTTY
ASSIGN ELFQFIX RESOURCES
DEASSIGN ATTACH ENABLE TIME
FINISH CDETACH KILL
FLUSH CFORK NOBROADCAST
REASSIGN DETACH NOEDIT
RESET FORK P2LOAD
PDETACH QUIT
SETUWP
TALK
TTY
11LOAD
INDEX
11LOAD command 87
@ command 86
ACCESS command 86
ACCESS switch in COPY 112
activation characters 16, 17
add channel 24
add piece of glass 26
addresses, core 5, 11
ADVANCE command 148
AL 88
AL switch in SNAIL 93, 105
ALGOL 5
alias 5, 19, 50, 52, 53
Alias (in WHO display) 72
ALIAS (in wholine) 19
ALIAS command 53
ALL switch in COPY 112
ALT 43
ALT key 15
alt mode 15, 172
ALT MODE, non-display 43
ALTOTALK display type 29
AMBASSADOR display type 29
APPEND switch in MAIL 128
arguments 7
ARM device 8
ARPA network 131, 154
ARPA switch in MAIL 128
ARROW (in TTY command) 45
ARROW (LOGIN option) 55
ASCII 15, 156, 172
ASCII switch in COPY 112
ASK switch in COPY 112
ASK switch in SPOOL 115
assembly language 5
ASSIGN command 8, 51
Associated Press 55, 86
ATSIGN program 86
ATT privilege 50, 87
ATTACH command 50, 56, 87
AUDIO (LOGIN option) 55
audio switch 27, 55
autologout 5
available channel 24
background mode 53
backspace 15
BACKSPACE command 148
backspace, deleting 16
backspace, non-deleting 16
BAIL 48, 49, 88, 98, 171
BAIL switch in SNAIL 98, 105
BATCH command 141
BBOARD 132
BBOARD filehack in COPY 110
BEEP 27
BEEP (in TTY command) 45
BEEP (LOGIN option) 55
BEEP command 87
beeping, automatic 27, 55
bibliography 171
BINARY switch in COPY 112
binary, relocatable see relocatable binary
BLISS 88
BLISS switch in SNAIL 93, 105
BLOCKED switch in COPY 112
BMARGIN switch in XSPOOL and DOVER 119
BONLY switch in COPY 112
BOOK command 89
book mode 89
BOW (LOGIN option) 55
BREAK 18
BREAK (in TTY command) 45
BREAK 1 X 19, 45
BREAK A 24
BREAK B 27
BREAK C 21
BREAK CALL 23
BREAK CLEAR 23
BREAK D 24
BREAK F 18, 45
BREAK G 24
BREAK H 22
BREAK key 15
BREAK L 24
BREAK M 23
BREAK N 20
BREAK O 18
BREAK P 20
BREAK Q 19
BREAK R 23
BREAK S 24
BREAK T 24
BREAK U 27
BREAK W 19
BREAK X 19, 45
BREAK . 18, 50
BREAK 1 . 18
BROADCAST command 87
BS 16
BS key 15
bucky bit (non-display escape) 44
bucky bits 15
bulletin board 132
C100A display type 29
C100B display type 29
CALL 18, 19, 43, 49, 53
CALL key 15
call, deferred 18
cameras, TV 22
CANCEL command 145
Canon printers 58, 115
CAR device 8
carriage return 15, 17, 43, 45, 55
CC switch in MAIL 128
CCONTINUE command 49
CDETACH command 50
CETV command 10, 89
CFORK command 50
channel number 24
channels, Data Disc 6, 19, 22, 52, 87
channels, private 22, 55
channels, public 22
CHAOS net, MIT 125
CHAR (job queue) 19
character conversion, non-display 43
character set 15, 172
character set, full 18
CHRMAC 42
CHRMAC (LOGIN option) 55
CKMAIL command 146
CKSUM program 146
CLEAR 16
CLEAR key 15
clear line editor 16
clear page printer 20
clearing typeahead 18
CLRUWP command 48
CMQ (job queue) 19
code, character 15, 172
command decoder 7, 15, 16
command files 61
commands, monitor 7, 173
commercial-free radio 27
COMPILE command 11, 93
COMPILE switch in SNAIL 93, 97, 105
compiling programs 11
complaints, compliments, criticisms 135
compute-bound program 53
CONLY switch in SNAIL 93, 97, 105
continuable 49
CONTINUE command 19, 49
CONTROL 61
CONTROL and META (non-display escape) 44
CONTROL key 15
CONTROL key, non-display see CTRL key
CONTROL-B 16
CONTROL-BREAK 18, 20
CONTROL-BS 16
CONTROL-CALL 18
CONTROL-CLEAR 18, 20
CONTROL-D 16
CONTROL-FORM 16
CONTROL-I 16
CONTROL-K 16
CONTROL-L 16
CONTROL-META-BS 16
CONTROL-META-LINE 18
CONTROL-META-SPACE 16
CONTROL-number 16
CONTROL-R 16
CONTROL-RETURN 16, 17
CONTROL-S 16
CONTROL-SPACE 16
CONTROL-T 16
CONTROL-TAB 16
CONVERT (in TTY command) 45
CONVERT (LOGIN option) 55
CONVERT switch in COPY 112
COOKIE (LOGIN option) 55
COPY 58, 108
COPY command 58
core see storage, core
CORE command 48
core image 5, 7, 11, 13, 19, 46, 48, 54, 72
COUNT switch in MAIL 128, 130
CREATE command 89
CREF command 104
CREF switch in SNAIL 97, 104, 105
CSD filehack in COPY 110
CSTART command 49
CTRL (control) key, non-display 43
CTRL-C, non-display 43
CTRL-I, non-display 43
CTRL-K, non-display 43
CTRL-L, non-display 43
CTRL-leftarrow 44
CTRL-O, non-display 43
CTRL-Q, non-display 43
CTRL-S, non-display 43
CTRL-U, non-display 43
CTRL-underscore 44
CTRL-Z, non-display 43
CTY device 8
CTYSET command 87
cursors 6, 16
DART 60, 148
data 8
Data Disc queue 23
Data Discs 6, 14, 16, 20, 21
Datamedias see terminals, individual display
DATE (in wholine) 19
DATE switch in MAIL 128, 129
DAY (in wholine) 19
DAY filehack in COPY 110
DAYTIME command 7, 52
DCAAVG command 87
DCQ (job queue) 19
DD (in wholine) 19
DD terminals see Data Discs
DDT 48, 49, 88, 98, 171
DDT command 49
DDT switch in SNAIL 98, 105
DDT, Executive 87
DE (deposit) command 48
DEASSIGN command 51
DEBUG command 93
debugging program see DDT, RAID, or BAIL
DECIDE command 86
DECtape 8, 19, 71, 166
default file protection, UFD's 112
Defense, Department of 154
deferred call 18
delete 15, 172
DELETE (in TTY command) 45
DELETE (LOGIN option) 55
delete channel 24
DELETE command 58, 113
delete piece of glass 26
DELETE switch in SPOOL 115
deletion of REMINDers, LATER requests, and queued MAIL 145
DENSITY switch in COPY 112
deposit in core see DE
DET (in WHO display) 72
DET (in wholine) 19
DET privilege 5, 55, 87
DETACH (LOGIN option) 55
DETACH command 50, 87
detached jobs 50, 72
DEV privilege 87
device 51, 166
device name 8, 87
device name, logical 8, 51
device name, physical 8, 51
device names, list of 8
device user 52
DFIND command 74
DIAL command 86, 156
DIGEST (LOGIN option) 55
DIGEST filehack in COPY 110
DIOW (job queue) 19
directories 8
DIRECTORY command 58, 113
directory device 8
DIRED 12
DIRED program 12
DISABLE command 87
disk 8, 19, 47, 51, 52, 53, 60, 71
disk PPN see alias
display see terminals, display
DISPLAY=... (LOGIN option) 55
DIST switch in MAIL 128
DLN device 8
DM (in wholine) 19
DM128 display type 29
DM2500 display type 29
DM3025 display type 29
DMP files 8, 11, 47, 105
DMs see terminals, individual display
DMWAITS display type 29
DO 61, 92, 100
DO command 61
documentation, program 5, 171
double bucky 15
Dover 58, 86, 115, 119
DOVER command 58, 115, 119
DOWN filehack in COPY 110
DQAVG command 87
DRD command 12
DSK device see disk
DSKF (in wholine) 19
DSKOPS (in wholine) 19
DSKQ (in wholine) 19
DSKSIZ command 85
DSPOOL switch in COPY 112
DTA device see DECtape
DTN 154, 155
DTQ (job queue) 19
DUMP command 148
dump file see DMP files
DUMP switch in SPOOL 115
DUMPED switch in COPY 112
DWQ (job queue) 19
E 10, 15, 55, 88, 171
E (examine) command 48
E switch in MAIL 128
EBOX msec (in TIME command) 52
ECHO (in TTY command) 45
ECHO (LOGIN option) 55
EDDT command 87
EDIT command 89
EDIT-CLEAR 28
EDIT-key Displays 33
editing 10
editor, display 10, 89
editor, line see line editor
EFIND command 84
EINIT (LOGIN option) 55
EINIT(n:m) (LOGIN option) 55
EINIT= ... (LOGIN option) 55
ELF device 8, 53
ELFQ (job queue) 19
ELFQFIX command 53
ENABLE command 87
end of file 18, 43
END switch in XSPOOL 119
EOT command 148
EREAD command 89
error messages 170
ESC 18
ESC ! 23
ESC * 18
ESC + 18
ESC 1 CR 28, 33
ESC 1 X 19, 45
ESC A 24, 26
ESC B 27
ESC C 21
ESC CALL 23
ESC CLEAR 23
ESC D 24, 26
ESC E 20
ESC F 18, 45
ESC FORM 20
ESC G 20
ESC H 18, 22
ESC I 18
ESC J 20
ESC key 15
ESC L 20
ESC M 23
ESC N 20
ESC n < 28
ESC n > 28
ESC n ! 23
ESC n CR 42
ESC O 18
ESC P 20
ESC Q 19
ESC R 20
ESC S 24, 26
ESC T 24
ESC U 27
ESC V 18
ESC W 19, 50
ESC X 19, 45
ESC Y 20
ESC Z 27
ESC . 18, 50
ESC 1 . 18
ESCAPE (in TTY command) 45
ESCAPE, non-display 43
Ethernet 87, 125, 131, 154
ETV see also E
ETV command 10, 89
EVEN switch in COPY 112
EVENT command 136
examine core see E (examine) command
EXECUTE command 11, 93
EXIST (in TTY command) 45
EXPAND switch in MAIL 128
extensions, filename 8
EXTRA switch in COPY 112
EXTRA switch in SPOOL 115
F4 switch in SNAIL 93, 105
F40 88, 171
FACT.TXT file 115
FAIL 5, 88, 171
FAIL switch in SNAIL 93, 105
FASM 88
FAST (LOGOUT option) 56
FAST switch in COPY 112
FDISPLAY=... (LOGIN option) 55
FF switch in SPOOL 115
file access groups 55
file directory see directory
file protection 55
file storage 8
File Transfer Protocol 154, 162
filehacks 110
filenames 8
FILES command 18, 52
files, disk 8, 19
FILL (in TTY command) 45
FILL (LOGIN option) 55
FIND command 74
FINGER command 12, 56, 85
FINISH command 51
FIXIMLAC command 86
FLUSH command 51, 87
FNOTABS (LOGIN option) 55
FONT switch in COPY 112
FONT switch in XSPOOL and DOVER 119
FOO switch in COPY 112
FORK command 50
form feed 15, 43, 110
FORM key 15
FORTRAN 88, 171
FORTRAN switch in SNAIL 105
FORTRAN switch in SPOOL 115
fortune cookie 55
FORWARD filehack in COPY 110
FORWARD switch in SNAIL 100, 105
forwarding, mail 132
FRAID command 86
FSIZE switch in DOVER 119
FTABS (LOGIN option) 55
FTP 154
FTP command 162
FUDGE2 99
FULL (in TTY command) 45
FULL (LOGIN option) 55
full character set mode 18, 55
FULL switch in COPY 112
gag 53
GAG (in TTY command) 45
GAG (LOGIN option) 55
GET command 47
GLASS (in TTY command) 45
GLASS (LOGIN option) 55
glass TTY 43
glass, pieces of 20, 26
glitch 20
GOLD filehack in COPY 110
graphics 6, 20
GRIPE (LOGIN option) 55
GRIPE command 135
GRIPES filehack in COPY 110
GRN device 8
GTOTAL switch in COPY 112
HALT command 49
HANG (in TTY command) 45
HANGUP (LOGOUT option) 56
HEADER switch in COPY 112
HEADER switch in MAIL 128
HEADING switch in SPOOL 115
HEATH19 display type 29
HELLO command 52
HELP command 12, 85
hide 18, 25
HIDE (in TTY command) 45
HIDE (LOGIN option) 55
HOLD switch in SPOOL 115
holding 18, 43
holding, automatic 20
home line for DD 23
HOST 154
HOT command 86
HOW file 171
HP2648A display type 29
I/O see device
IGNI switch in COPY 112
IGNO switch in COPY 112
III (in wholine) 19
IIIs 6, 14, 16, 20, 26
IMLAC 86
IMP device 8, 154
IMPTYP switch in MAIL 128
Increment (in TIME command) 52
individual display terminals see terminals, individual display
information, system 5, 12, 52, 72
INIT (LOGIN option) 55
input buffer 7, 17, 18, 61
Interface Message Processor see IMP
Introduction for New Users 3
Introduction to Terminals 6
INTW (job queue) 19
IOWQ 19, 49
IOWQ (job queue) 19
JBS (in wholine) 19
JLOG 50, 72, 87
JLOG bit 50
Job (in WHO display) 72
JOB (in wholine) 19
Job Data Area 13, 48, 49
job name 47, 72, 85
job number 5, 7, 9, 50, 51, 52, 53, 72, 85
JOBDDT 48, 49
JOBFF 48
Jobnam (in WHO display) 72
JOBNAM (in wholine) 19
JOBPC 49
JOBRD 19
JOBREN 49
jobs 19
JOBSA 13, 49
KATTACH command 56
keyboard mapping 22
keyboard scanner 15, 18
keyboards 15
KILL command 53
KILL switch in COPY 112
KJOB command 9, 56
KL-10 5
KLOG command 56
L switch in E 89
languages, programming 5, 171
LATER command 140
LATER requests, deleting 145
letters, lower case 7, 8, 18, 43, 45
LHEIGHT switch in DOVER 119
LIBRARY switch in SNAIL 93, 99, 105
LINE see line feed
Line (in WHO display) 72
LINE (job queue) 19
line editor 6, 15, 16, 17, 20
line feed 15, 43
LINE key 15
line number, terminal 24, 52, 72
line numbers, SOS 10, 112, 115
line printer see printers
LINK 88
LINK switch in SNAIL 98, 105
LISP 5, 61, 171
LISP command 86
LIST switch in COPY 112
LIST switch in MAIL 128
LIST switch in SNAIL 97, 105
LIV privilege 5, 87
LMARGIN switch in XSPOOL and DOVER 119
LOAD (in wholine) 19
LOAD command 11, 93
LOADER 48, 49, 88, 105
LOADER switch in SNAIL 98, 105
loader switches 102, 106
loading programs 11
local user 86
LOCATE command 148
LOCK 19
logged-in user 87
logical device name see device name, logical
LOGIN command 5, 7, 9, 55
login options 30, 55
login, automatic 7
LOGOUT 9, 10, 56
LOGOUT command 56
logout, automatic 5
LOGOUT.MSG file 56
LOGRUN 55
LOGRUN (LOGIN option) 55
LONLY switch in SNAIL 93, 97, 105
lower segment 13
LUP privilege 87
MACRO 88, 171
MACRO switch in SNAIL 93, 105
macros, terminal input 42, 44, 55
MAGIC 25
magnetic tape 8, 19, 47, 51, 60, 167
MAIL 55, 59, 122, 123
MAIL command 55, 132
MAIL error recovery 142
MAIL filehack in COPY 110
MAIL switch in MAIL 128
MAIL$E.TXT file 124, 142
mail, deleting queued 145
MAIL, interfacing with, from other programs 144
mail, network 131
MAKE command 89
MAP switch in SNAIL 98, 105
mapping 23
mapping, keyboard see keyboard mapping
MAS access group 55
ME (LOGIN option) 55
ME (LOGOUT option) 56
MESSAG (LOGIN option) 55
messages, sending and mailing 123
messages, system 9, 55, 132, 136
META 16, 61
META key 15
META-BS 16
META-CALL 18
MICRO-PLANNER 5
MIDAS 88
MIDAS switch in SNAIL 93, 105
MLENGTH switch in COPY 112
MODE switch in SPOOL 115
monitor mode 7, 9, 15, 18, 18, 47, 49, 50
MSG filehack in COPY 110
MTA device see magnetic tape
MTQ (job queue) 19
Multics 162
N switch in E 89
NAME command 138
NAP filehack in COPY 110
NARROW switch in SPOOL 115
NCHARS switch in DOVER 119
Negative Service Level 53
NETDBG switch in MAIL 128
network 73, 85
New York Times 86
NEWS filehack in COPY 110
news service see NS
NL (in wholine) 19
NLINES switch in DOVER 119
NO switch in MAIL 128
NOARROW (LOGIN option) 55
NOBOW (LOGIN option) 55
NOBROADCAST command 87
NOCMFI switch in SNAIL 93, 105
NOCONVERT (LOGIN option) 55
NOCOPY switch in SPOOL 115
NODELETE (LOGIN option) 55
NODELETE switch in SPOOL 115
NODIST switch in MAIL 128
NODM (LOGOUT option) 56
NODMP switch in SNAIL 93, 98, 105
NODUMP switch in SNAIL 98
NODUMP switch in SPOOL 115
NOECHO (LOGIN option) 55
NOEDIT Displays 34
NOFF switch in COPY 112
NOFF switch in SPOOL 115
NOFILL (LOGIN option) 55
NOFORTRAN switch in SPOOL 115
NOFULL (LOGIN option) 55
NOGAG (LOGIN option) 55
NOGLASS (LOGIN option) 55
NOHEADING switch in SPOOL 115
NOLOAD switch in SNAIL 93, 100, 105
NOMAIL (LOGIN option) 55
NOMAIL switch in MAIL 128
NOMSG switch in MAIL 128
non-displays see terminals, non-display
NONARROW switch in SPOOL 115
NONOTE (LOGIN option) 55
NONUMBER switch in SPOOL 115
NONUMBERS switch in COPY 112
normal activation mode 17
normalize page printer 20
NOSPACES switch in COPY 112
NOTABS (LOGIN option) 55
NOTICE filehack in COPY 110
NOTICE.TXT file 55, 132, 136, 147
NOTITLE switch in SPOOL 115
NOWARN switch in SPOOL 115
NOWHO (LOGIN option) 55
NOWRAPAROUND switch in XSPOOL 119
NOXGP switch in XSPOOL 119
NS 55, 147
NS command 86
NS filehack in COPY 110
NSL 53
NTNODE switch in XSPOOL 119
NUL device 8
null job 52, 72
null-time 19
NULQ (job queue) 19
NULREL switch in SNAIL 105
NUMBER switch in SPOOL 115
number, line see line numbers
NVNODE switch in XSPOOL 119
OCTAL switch in SPOOL 115
ODD switch in COPY 112
OFFSET switch in COPY 112
OFIND command 74
old mode (UDP) 51
OONLY switch in COPY 112
OPEN (LOGOUT option) 56
operator 53
OPTIMIZE switch in COPY 112
OPTION filehack in COPY 110
OPTION.TXT file 30, 55, 56, 147, 164
OTN 154, 155
OUTGO switch in MAIL 128
OUTGO.MSG file 125, 147
output buffer 18
P switch in E 89
P1 console 87
P2LOAD command 87
page printer 20, 26
Page-Seconds 52
pages 13
PALX 88
PALX switch in SNAIL 93, 105
paper tape 8
paper, pieces of 20
Partial font loading 119
PASCAL 88
PASCAL switch in SNAIL 93, 105
password 55, 71
PAUSE switch in COPY 112
PDETACH command 50
PDP-10 4, 5, 15
PDP-10 console 8
PDP-11 device 8
PGX pseudo-device (COPY) 111
phantom 50, 72, 87, 115
physical device name see device name, physical
pieces of glass 20
pieces of paper 20
PITIME command 87
PJOB command 52
PL (in WHO display) 72
PLAN command 137
plan file 85, 110, 137, 147
PLAN filehack in COPY 110, 137
PLIMIT switch in XSPOOL 119
PLIST command 148
PLN filehack in COPY 110, 137
PMARGIN switch in XSPOOL 119
PORNO (LOGIN option) 55
POX 88
POX command 91
PPN 5, 8, 9, 19, 50, 52, 53, 55, 56, 85, 87
PPN (in WHO display) 72
PPN (in wholine) 19
PPN, disk see alias
PPPN command 52
PREFIX, non-display 43
PREPARE command 93
printers 58, 115
private device 51
privilege, file access 55
privileged commands 87
PROCESS command 92
PROCESSOR switch in SNAIL 100, 105
programmer name 5, 19, 53, 59, 85
programs, display 20, 26
programs, system 46, 47, 54
programs, system information 7, 12
project name 5
project-programmer name see PPN
protected mail files 132
protection 55
PROTECTION switch in COPY 112
PROVE command 86
PS (in TIME command) 52
pseudo-mailbox 132
pseudo-teletype see PTY
PTP device 8
PTR device 8
PTTY command 52
PTY 8, 56, 72
PTYJOB 156
PUB 88, 171
PUB command 91
public device 51
PUMPKIN command 148
PUP device 8, 154
QMAINT (LOGIN option) 55
QSPOOL command 58, 115, 120
QSPOOL switch in SPOOL 115
queue 85
Queue (in WHO display) 72
QUEUE (in wholine) 19
queue names 19
QUEUE switch in MAIL 128
queued mail 128, 131, 132, 139
queued mail, deleting 145
QUIET switch in COPY 112
QUIT command 53
R (in wholine) 19
R command 47, 54
R switch for editors 89
RAID 48, 49, 88, 98, 171
RAID switch in SNAIL 98, 105
RCOR (in wholine) 19
RCV 147
READ command 12, 89
REAP command 148
REASSIGN command 51
RECOPY switch in SPOOL 115
records 8
REENTER command 49
REFERENCED switch in COPY 112
refresh 20
REL files 8
REL switch in SNAIL 93, 105
relocatable binary 8, 11
REMIND (LOGIN option) 55
REMIND command 134
reminders, deleting 145
RENAME command 58, 113
RENAME switch in COPY 112
repeat escape command 18
REPEAT switch in SPOOL 115
REPLYTO switch in MAIL 128
RER command 92
RERUN command 92
RESET 20, 47, 48
RESET command 53
RESOURCES command 52, 169
responsible keyboard 23
RESTORE command 148
retrieve last line 16
RETRY command 139
RETURN see carriage return
RETURN key 15, 16
REWIND command 148
RMARGIN switch in XSPOOL 119
ROTATE switch in DOVER 119
RP (in wholine) 19
RPG 56
RPG filehack in COPY 110
RPGSAV (LOGIN option) 55
RPGSAV (LOGOUT option) 56
RTIME 19
RUBOUT, non-display 43
RUN (LOGIN option) 55
RUN command 47
run time 52, 72, 85
running programs 11, 47
RUNQ (job queue) 19
RUNTIME (in wholine) 19
runtime, incremental 19
S1 switch in SNAIL 93, 105
SAI files 8
SAIL 5, 88, 171
SAIL switch in SNAIL 93, 105
SAISEG switch in SNAIL 98, 105
SAVE command 48
SAVE switch in COPY 112
SAVE switch in SNAIL 98, 105
SAVED.MSG file 147
scanner, keyboard see keyboard scanner
scrolling 20
SD 154
SEARCH switch in COPY 112
Seg (in WHO display) 72
segment, lower see lower segment
segment, upper see upper segment
SEGNAM (in wholine) 19
select audio channel 27
select channel 24
select piece of glass 26
SEND command 133
SEND switch in MAIL 128
SETPR2 170
SETUWP command 48
SHIFT key, non-display 43
SHIFT keys 6, 15
SHIFT LOCK key 6, 15
Short WAITS 171
Size (in WHO display) 72
SIZE (in wholine) 19
SLEEP 19
SNAIL 10, 57, 88
SNDMSG see MAIL program
SNK (job queue) 19
SOS 10, 88, 89, 171
SOS representation 43
spacewar module 19, 72, 170
special activation mode 17
SPEED (in TTY command) 45
SPOOL command 58, 115
SPOOL switch in COPY 112
spoolers 58, 111, 115
spying 25
SSAVE command 48
Stanford ASCII see WAITS ASCII
START command 49
starting programs 49
status, system 19
STOP (job queue) 19
stop a program 15
stop typeout 18, 43
storage, core 5, 13, 19
SUBJECT switch in MAIL 128
SUNet 125, 131, 154
SUPDUP 154, 161
suspend typeout 18, 43
Suspended XGP listings 119
switch, audio see audio switch
switch, video see video switch
SWR (in WHO display) 72
SYS device 8, 47, 51
SYSTAT (LOGIN option) 55
SYSTAT command 85
system messages 132, 136
system programs 47
system wholine see wholine
TAB 16, 43
TAB key 15
TABS (in TTY command) 45
TABS (LOGIN option) 55
tabs, hardware 45
TALK command 53
talk ring 53
tape, magnetic see magnetic tape
tape, paper 8
TCOR (in wholine) 19
TECO 10, 88, 89, 171
TECO command 89
TELERAY display type 29
TELERB display type 29
Teletypes 6
TELEVIDEO display type 29
TELNET 154, 155
TEMPC (in wholine) 19
TEMPF (in wholine) 19
terminal 7, 8, 45
terminals, display 6, 15, 20, 28
terminals, EDIT-key display 33
terminals, individual display 28
terminals, no-EDIT-key display 34
terminals, non-display 43
TEST command 86
TEX 88
TEX command 91
text nodes 119
TGAG (in TTY command) 45
tick 19, 72
TIME (in TTY command) 45
Time (in WHO display) 72
TIME (in wholine) 19
TIME command 52
TIME switch in COPY 112
TIME switch in MAIL 128, 129
timesharing 4
TITLE switch in COPY 112
TITLE switch in SPOOL 115
TLIST command 148
TMARGIN switch in XSPOOL and DOVER 119
TMP 56
TMPCOR 56, 61
TN 154, 155
TOP key 6, 15
TPL pseudo-device (COPY) 111
TQ (job queue) 19
TRANSFER command 58, 113
TRY command 93
TTY (in wholine) 19
TTY command 29, 45
TTY device see terminals
TTY EXIST nnn command 87
TTY NO DM 56
TTY SPEED 87
TTY ENABLE nnn command 87
TTYUUO 43
TURKEY command 148
TV (in WHO display) 72
TV device 8
TV receivers 24
TYPE command 58, 113
type wholine 44
typeahead 7, 18
UCOR (in wholine) 19
UDP 8, 51, 52, 71, 111, 169
UDPUFD command 86
UFD 8
UFD command 86
UFD protection 112
UFDPRO switch in COPY 112
UIGNORE switch in COPY 112
UNDELETE command 86
UNHIDE (LOGIN option) 55
UNPROTECT command 86
UNPUMPKIN command 148
UNREAP command 148
UNSPOOL 121
UNSPOOL command 58, 115
UPDATE (in TTY command) 45
UPG privilege 87
upper segment 13, 19, 48, 72
user disk pack see UDP
User File Directory 8
user mode 7, 49
USETI switch in XSPOOL 119
UTPCLR 71
UUO Manual 171
UUOs 4, 5
vector 6
vector nodes 119
VERIFY command 86
vertical position 20
vertical tab 15
video switch 22
virtual terminal 22
volleyball players 125
VRN device 8
VT 43
VT key 15
Wait (in TIME command) 52
WAIT switch in COPY 112
WAITS ASCII 15, 172
WARN switch in SPOOL 115
WHEN command 85
WHERE command 12, 85
WHERE switch in MAIL 128
WHO (in TTY command) 45
WHO (LOGIN option) 55
WHO command 7, 12, 72
wholine 19, 45, 55
WIDTH (in TTY command) 45
WIDTH (LOGIN option) 55
wizards 45
word delete (non-display escape) 44
WORDS switch in COPY 112
WRAPAROUND switch in XSPOOL 119
WRITER switch in COPY 112
XDIGEST (LOGIN option) 55
Xerox Graphics Printer see XGP
XFACT.TXT file 115
XGP 8, 58, 86, 115, 119, 168
XGP switch in XSPOOL 119
XGPLIST command 58, 113
XHEADB switch in MAIL 128
XLINE switch in XSPOOL 119
XMAIL (LOGIN option) 55
XP (in wholine) 19
XPART 119
XSPOOL command 58, 115, 119
XTIME 19, 45
XTIME (in wholine) 19
YESMAIL switch in MAIL 128
ZERO command 71
↑← . (non-display escape) 44
↑← C (non-display escape) 44
↑← D (non-display escape) 44
↑← F (non-display escape) 44
↑← H (non-display escape) 44
↑← I (non-display escape) 44
↑← L (non-display escape) 44
↑← M (non-display escape) 44
↑← N (non-display escape) 44
↑← n CR (non-display escape) 44
↑← n V (non-display escape) 44
↑← R (non-display escape) 44
↑← W (non-display escape) 44
↑← X (non-display escape) 44
↑← Z (non-display escape) 44
↑← ↑W (non-display escape) 44
↑-char (control character) see CTRL (control) key